问题描述
我是 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 (将#修改为@)