class Pair {
public:
int *pa,*pb;
Pair(int a, int b)
{
pa = new int(a);
pb = new int(b);
}
Pair(const Pair& other) {
int* pc = new int(*other.pa);
int* pd = new int(*other.pb);
}
~Pair() {
delete pa;
delete pb;
}
};
在此程序中,编译器产生了分段错误(核心转储),在完全删除析构函数之后,我们能否使程序运行而没有任何错误,因此有人可以帮助我吗?即使在参数化的构造函数中,我也初始化了指针,编译器也发出警告,指出点和pb尚未初始化。
对于您的复制构造函数,您应该(最有可能)这样做:
Pair(const Pair& other) {
pa = new int(*other.pa);
pb = new int(*other.pb);
}
这完成了复制构造函数的预期工作。
使用您的代码,当对通过其复制构造函数创建的Pair
对象调用析构函数时,您正试图删除未初始化的指针。
std::unique_ptr
进行资源管理: