我想知道将新的unique_ptr分配给先前的unique_ptr时会发生什么。在下面的代码中:
std::unique_ptr<my_class> test;
......
test = std::unique_ptr<my_class>(new my_class());
......
test = std::unique_ptr<my_class>(new my_class());
我期望第二次分配新的std :: unique_ptr进行测试时,首先调用my_class的析构函数,然后调用它的构造函数。我期望的是错误的吗?但是当我调试代码时,我看到的是相反的。首先调用my_class的构造函数,然后调用它的析构函数。
之所以要在前一个实例的析构函数之前调用构造函数,是因为您要将其new my_class()
作为参数传递给unique_ptr的构造函数。首先对参数进行求值,构造一个新的unique_ptr实例,该实例获取新创建的对象的所有权,然后将该新的unique_ptr实例分配给旧对象。
结果,拥有所有权的旧unique_ptr的my_class对象将被释放并销毁,从而调用my_class析构函数。
它实际上与您编写的内容相同:
my_class* temp = new my_class;
test = std::unque_ptr<my_class>(std::move(temp));
在这里可以直接看到新对象是首先构造的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句