这是有关语言限制的问题,请不要回答(您不应该这样做),是否应该无关紧要,是否可以无关紧要。
假设我们要编写一个获取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