有些不应该被复制的对象, 被复制了, 复制前后的对象都持有同一指针成员, 析构时重复释放造成内存异常,程序coredump
示例代码#include#include using namespace std; class Person { public: Person() { name = new string(); } ~Person() { delete name; name = nullptr; } string* name; }; int main(int argc, char* argv[]) { Person p1; *p1.name = "Wang Liang"; Person p2(p1); *p2.name = "Liu Ming"; return 0; }
程序运行coredump
解决方法
1.确实需要复制构造的场景, 指针对象考虑使用深copy,或考虑使用shared_ptr共享持有
使用深copy
Person(const Person& other)
{
name = new string(*other.name);
}
2.不需要复制构造的场景可以禁用复制构造
使用如下方式禁用复制构造
Person(const Person&) = delete;
这时使用复制构造会编译不过



