作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题在这里已经有了答案:
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);
enter code here
谁能在这一点上向我解释一下
最佳答案
问题是每次调用 Shallow::~Shallow
删除 data
指针的内存,但不是每个新的 Shallow
分配一个新的内存块。每delete
需要正好对应一个 new
.但
display_shallow(obj1);
Shallow
使用
display_shallow
的对象(按值传递给
data
)
obj1
的指针
obj1
使用的内存块
obj2
也分享
obj1
的指针,它不再指向任何地方。当您尝试调用
obj2.set_data_value(1000)
,您正在取消引用无效指针,这是未定义的行为。你应该认为自己很幸运,该计划只是坠毁,而不是发射核导弹。
关于c++ - 为什么程序很糟糕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60747525/
我是一名优秀的程序员,十分优秀!