我正在学习C++,我已经编写了一些代码来获得手动创建和删除对象的一些经验.我不认为我完全理解删除的语义,因为print语句仍然打印3,我相信它不应该.
码
#include <iostream>
class Test {
public:
int x;
int y;
};
using namespace std;
int main() {
Test t1;
t1.x = 1;
t1.y = 2;
cout << t1.x << endl;
cout << t1.y <<endl;
Test *t2 = new Test();
t2->x = 3; t2->y = 4;
cout << t2->x << endl;
cout << t2->y <<endl;
delete t2;
cout << t2->x << endl;
}
Run Code Online (Sandbox Code Playgroud)
产量
joel-MacBook-Air:src joel$ ./test
1
2
3
4
3
Run Code Online (Sandbox Code Playgroud)
请问你能解释为什么它在最后打印3?我的知识是它不应该打印3删除对象.
在销毁对象后访问对象是未定义的行为.你的程序可以做任何事情.碰巧你仍然得到了价值3.
4.1/1 [conv.lval]非函数非数组类型T的glvalue可以转换为prvalue.[...]如果glvalue引用的对象不是T类型的对象,并且不是从T或[...]派生的类型的对象,则需要此转换的程序具有未定义的行为.
访问对象的成员需要进行此转换.
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |