为什么在这段简单的代码中析构函数~TestClass()
被调用了两次?
#include <memory>
#include <iostream>
#include <vector>
class TestClass
{
int m_val;
public:
TestClass(int val);
~TestClass();
};
TestClass::TestClass(int val) : m_val(val)
{
std::cout << this << " TestClass() " << m_val << "\n";
}
TestClass::~TestClass()
{
std::cout << this << " ~TestClass() " << m_val << "\n";
m_val = -1;
}
int main()
{
auto x = std::make_unique<TestClass>(2);
auto y = *x; // <<<< this triggers it
}
字符串
输出
000001E66C0B5980 TestClass() 2
00000057FDD9FAB4 ~TestClass() 2 // why is the destructor called here?
000001E66C0B5980 ~TestClass() 2
型
1条答案
按热度按时间ctrmrzij1#
auto y = *x;
//<这会触发它上面是copy initialization,并将使用类的copy构造函数。您看到的额外析构函数调用对应于此对象
y
。您也可以通过向类添加复制ctor来验证这一点,您会注意到复制ctor用于使用*x
创建y
。字符串