Mic*_*ael 2 c++ pointers copy-constructor
我在某处读到:
每个具有指针数据成员的类都应包含以下成员函数:
- 析构函数
- 复制构造函数,
- operator =(赋值)
这是真的吗?如果复制对象没有意义怎么办?
如果有问题的指针数据成员指向不需要复制或无法更改的内容,该怎么办?
我举一个具体的例子:一个人出生在某个特定日期; 日期是一个对象,它包含一天的值或一周中的哪一天.我不想"复制"一个人,但即使我必须,他们不应该指向同一个Date对象吗?
如果是真的,为什么?
指针数据成员可以表示不同的事物.如果指针只是一个观察指针(对于其他地方管理的对象),那么编译器生成的复制构造函数和运算符(它只是复制指针的值)绝对没有问题.这里的一个潜在问题是指针可能比对象寿命更长,使其成为悬空指针.
如果它是指向堆上分配并由其管理的内存的指针this,则必须确保正确完成复制.简单地说不实现copy(构造函数和运算符)不是一个选项,因为编译器会自动创建它们,而那些很可能不会做你想要的.从2011年开始(使用C++ 11),您当然可以=delete使用复制和/或实现移动(构造函数和运算符).
然而,最明智的做法是为了避免有利于数据管理类的像这样的指针std::unique_ptr或std::vector等.
| 归档时间: |
|
| 查看次数: |
103 次 |
| 最近记录: |