在对对象调用 delete 后访问成员函数
Accessing member function after calling delete to an object
有人请解释一下。到目前为止,我知道,删除后我无法访问分配的内存。如果我错了,请纠正我。
#include <iostream>
using namespace std;
class A
{
int x;
public:
A()
{
x = 3;
cout<< "Creating A" <<endl;
}
~A()
{
cout<< "Destroying A" <<endl;
}
int getX()
{
return x;
}
};
int main(int argc, const char * argv[])
{
A* a = new A();
delete a;
cout<< a->getX()<<endl;
return 0;
}
输出显示如下!
Creating A
Destroying A
3
我不明白删除a
后如何拨打getX()
你是未定义行为的受害者。当他们说这是未定义的行为时,这意味着任何事情都可能发生,包括代码可能appear
正常工作。
释放动态分配的内存时,不会擦除内存。这意味着您当前的流程不拥有它,但内容会保留在那里,直到它们被重新用于其他内容。
但是访问未分配的内存是致命的。
而且,当您通过delete a
释放内存时,它会通过a
释放内存帮助,但a
仍在范围内,并且其生命周期直到主进程结束。
因此,您可以执行函数调用。删除内存不会破坏变量本身,但会清理变量持有的内存。非动态变量在其生存期结束时由编译器销毁。
这是一种未定义的行为,任何事情都可能发生。如果内存块尚未填充其他内容,则可能不会像您所看到的那样崩溃,但是请不要访问释放的内存!
并且不要使用原始指针,我们为此目的创建智能指针。
行为未定义。在我的实现中任何事情都可能发生,该程序显示垃圾值。实际上标准没有定义任何东西,实现可以自由选择任何东西
相关文章:
- C++ 传递指向对象的指针的指针,无法访问成员
- 从不同C++类的成员变量访问成员函数
- 使用 getter 访问成员变量C++
- 如何使用包含内部类的类实例有效地从内部类访问成员?
- 通过多个类访问成员时出错
- 如何在使用对象指针时访问成员函数
- 为什么相应成员不能正确访问成员函数指针
- 从两个不同类继承的非虚拟基类的访问成员
- 如何使用 gcc 内联汇编器代码访问成员变量
- 如何使用常数向量访问成员函数
- 访问成员函数中参数的类成员
- C++嵌套结构初始化和访问成员
- 通过指向班级第一个成员的指针访问成员是不确定的行为吗?
- 如何使用C STD :: SET中的迭代器访问成员功能
- 访问成员C 时,结构的向量生成了范围的错误
- 带指针的班级访问成员
- 从聚合类访问成员变量
- 如何访问成员变量 sqlite 回调
- ctypes/C++segfault访问成员变量
- 通过父类型的指针或直接从派生类访问成员函数的差异