如何解决在 C++ 中删除指针两次
我是 C++ 代码的新手。所以,下面的代码对我来说看起来很不错。
#include<iostream>
using namespace std;
class B {};
class A {
public:
B* b;
A() {
cout << "ctor" << endl;
b = new B();
}
~A() {
cout << "dtor" << endl;
delete b;
}
};
void func(A a) {
cout << a.b << endl;
}
int main() {
A a;
cout << a.b << endl;
func(a);
cout << a.b << endl;
}
但我发现这段代码有问题。当我运行它时,它给出了 free(): double free detected in tcache 2
错误。我知道这个错误的原因(这是因为 dtor 被调用了 2 次)。
解决问题的一种方法是,为 A 类编写一个复制构造函数,其中我像这样创建了一个 new B()
。
A(A const& a) {
cout << "copy ctor" << endl;
b = new B();
*b = *a.b;
}
但是如果 B 是一个非常大的类,因此如果我更喜欢共享 b 指针,那么我该如何避免这个问题?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。