gpt4 book ai didi

c++ - 为什么程序很糟糕

转载 作者:行者123 更新时间:2023-12-02 10:19:41 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





What is The Rule of Three?

(8 个回答)


2年前关闭。



  #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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com