为什么程序崩溃

安图兔
  #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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章