复制构造函数和运算符是必须的吗?

Mic*_*ael 2 c++ pointers copy-constructor

我在某处读到:

每个具有指针数据成员的类都应包含以下成员函数:

  1. 析构函数
  2. 复制构造函数,
  3. operator =(赋值)

这是真的吗?如果复制对象没有意义怎么办?

如果有问题的指针数据成员指向不需要复制或无法更改的内容,该怎么办?

我举一个具体的例子:一个人出生在某个特定日期; 日期是一个对象,它包含一天的值或一周中的哪一天.我不想"复制"一个人,但即使我必须,他们不应该指向同一个Date对象吗?

如果是真的,为什么?

Wal*_*ter 5

指针数据成员可以表示不同的事物.如果指针只是一个观察指针(对于其他地方管理的对象),那么编译器生成的复制构造函数和运算符(它只是复制指针的值)绝对没有问题.这里的一个潜在问题是指针可能比对象寿命更长,使其成为悬空指针.

如果它是指向堆上分配并由其管理的内存的指针this,则必须确保正确完成复制.简单地说不实现copy(构造函数和运算符)不是一个选项,因为编译器会自动创建它们,而那些很可能不会做你想要的.从2011年开始(使用C++ 11),您当然可以=delete使用复制和/或实现移动(构造函数和运算符).

然而,最明智的做法是为了避免有利于数据管理类的像这样的指针std::unique_ptrstd::vector等.