什么时候依靠隐式副本构造函数安全?

时间:2018-12-14 15:05:58

标签: c++

在这个非常简单的程序中,构造函数被调用一次,而析构函数被调用两次:

#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)有相同的问题吗?

0 个答案:

没有答案