在这个非常简单的程序中,构造函数被调用一次,而析构函数被调用两次:
#include <iostream>
using namespace std;
class CTest
{
public:
int m_val;
CTest(int val);
~CTest();
};
CTest::CTest(int val) : m_val(val)
{
cout << "construct " << m_val << '\n';
}
CTest::~CTest()
{
cout << "delete " << m_val << '\n'; m_val = 77777;
};
int main() {
CTest a(2);
CTest b = a;
}
输出:
construct 2
delete 2
delete 2
预期输出:
construct 2
delete 2
这实际上是由于隐式副本构造函数(如果我错了,请纠正我)。
我是否需要在此处定义副本构造函数,还是依靠隐式副本构造函数安全吗?
我是否有非POD类成员(例如std::string
)有相同的问题吗?