C++避坑指南-复制相同指针重复释放问题
问题场景
有些不应该被复制的对象, 被复制了, 复制前后的对象都持有同一指针成员, 析构时重复释放造成内存异常,程序coredump
示例代码
#include <iostream>
#include <string>
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;
这时使用复制构造会编译不过
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具