This question already has answers here:
What is The Rule of Three?
(8个答案)
9个月前关闭。
好吧,直到这里
浅obj2 {obj1};
在这里我的程序停止运行
obj2.set_data_value(1000);
返回0;
}
在我的程序结束时出了点问题
1)创建一个新的临时
2)销毁临时文件,这将删除临时文件和
(8个答案)
9个月前关闭。
#include <iostream>
using namespace std;
class Shallow {
private:
int *data;
public:
void set_data_value(int d) { *data = d; }
int get_data_value() { return *data; }
// Constructor
Shallow(int d);
// Copy Constructor
Shallow(const Shallow &source);
// Destructor
~Shallow();
};
Shallow::Shallow(int d) {
data = new int;
*data = d;
}
Shallow::Shallow(const Shallow &source)
: data(source.data) {
cout << "Copy constructor - shallow copy" << endl;
}
Shallow::~Shallow() {
delete data;
cout << "Destructor freeing data" << endl;
}
void display_shallow(Shallow s) {
cout << s.get_data_value() << endl;
}
int main() {
Shallow obj1 {100};
display_shallow(obj1);
好吧,直到这里
浅obj2 {obj1};
在这里我的程序停止运行
obj2.set_data_value(1000);
enter code here
在这一点上谁能向我解释一下返回0;
}
在我的程序结束时出了点问题
最佳答案
问题在于,每次对Shallow::~Shallow
的调用都会删除data
指针的内存,但并非每个新的Shallow
都会分配一个新的内存块。每个delete
需要精确地对应一个new
。但
display_shallow(obj1);
1)创建一个新的临时
Shallow
对象(按值传递给display_shallow
),该对象使用data
的obj1
指针2)销毁临时文件,这将删除临时文件和
obj1
都使用的内存块obj2
也共享obj1
的指针,该指针不再指向任何地方。当您尝试调用obj2.set_data_value(1000)
时,您将取消引用无效的指针,这是未定义的行为。您应该认为自己很幸运,该程序只是崩溃了,而不是发射了核导弹。关于c++ - 为什么程序会崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60747525/
10-12 17:33