【发布时间】:2018-07-28 06:16:32
【问题描述】:
我想知道当我将新的 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 的第一个构造函数,然后调用它的析构函数。
【问题讨论】:
-
@seccpur 是的,我现在就这样做了,但我想知道为什么会这样
-
如果第二个构造函数调用抛出异常,你会发生什么?顺便说一句:您问题中的
unique_ptr是一个红鲱鱼,这里没有适用的特殊规则。 -
@UlrichEckhardt 构造函数或析构函数不能抛出异常。
-
不错的猜测,但是错了。
-
@UlrichEckhardt 简短的回答是,在构造函数中扔东西是危险的。 link。我不记得了,但我读过一些从不会在构造函数或析构函数中抛出异常的书。