#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)
,您将取消引用无效的指针,这是未定义的行为。您应该认为自己很幸运,该程序只是崩溃了,而不是发射了核导弹。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句