是否可以将已经初始化的变量转换为void *?

这是有关语言限制的问题,请不要回答(您不应该这样做),是否应该无关紧要,是否可以无关紧要。

假设我们要编写一个获取ANY对象所有权的子例程。例如,我们可以这样写:

void function(void* object)
{
   // store the pointer somewhere
}

auto ptr = new MyObject(params);
function(ptr);

上面的方法有效,但是强制用户使用新的运算符初始化他希望存储的对象。我想知道您是否可以“窃取”对象的内容,即使它已正常初始化也是如此。

我想知道您是否可以做这样的事情:

template <typename T>
void function(T& object)
{
   void* ptr = malloc(sizeof(T));
   *ptr = std::move(object); // Or somehting like this
   // sotre ptr somewhere
}

MyObject object(params);
function(object);
// object variable is now invalid