我可以在成员函数中的此指针上应用删除吗?
can i apply delete on this pointer inside a member function?
我知道是否已调用成员函数使用指针到动态分配的对象,该对象将被删除。但是,如果使用静态分配的对象调用了成员函数,那么将会发生什么?
class sample
{
int i;
public:
void func()
{
delete this;
}
};
void main()
{
sample *s = new sample;
s->fun();
sample s1;
s1.fun();
}
只要您知道如何分配该指针,就可以删除成员函数中的指针。没有一种便携式的方式可以仅仅从指针出发。
如果通过一个尚未动态分配的指针传递,并且该函数在该指针上调用delete
,则是未定义的行为。此外,即使是针对分配为数组的动态对象的指针也不能与常规delete
操作员一起释放:您必须在它们上使用delete[]
。一个简单的规则是,当您不知道指针的起源时,您不在其上调用delete
。
您只能使用new
分配对象时使用delete
。就那么简单。因此,您给出的第一个示例是合法的,第二个不是。第二种情况可能会崩溃,或更糟糕的是,在远离问题的某个地方,在看似随机的内存分配处造成堆的损坏。
如果在静态分配的对象的任何成员函数中调用此删除,则调用delete delete将在运行时崩溃。因为当此对象脱离范围时,编译器将自动调用destructor,它将尝试删除不再存在的对象。
相关文章:
- 通知 Windows 系统应用程序字体已被卸载/删除
- Linux 从永远在线的应用程序中创建和删除文件
- 从 c++ 应用程序中删除应用程序验证程序
- 当删除上下文属性中的QLIST对象时,QT QML应用程序崩溃
- 内部源代码 - 在链接列表实现中插入元素上的删除会破坏整个应用程序
- CRT 检测到应用程序在堆缓冲区(新建/删除)类结束后写入内存
- 如何从属性表中删除确定,取消和应用按钮
- 删除“按任何键” ..&quot.从VS C 控制台应用程序
- 是否可以子类 std::unique_ptr 透明地应用自定义删除器
- C++应用程序:如何正确删除/释放已分配的对象
- JNI检测到应用程序中的错误:使用已删除的弱全局参考
- qquickvew删除导致应用程序崩溃
- 使用VC 应用中的VSTO ADDIN触发Outlook电子邮件附件的删除
- 我可以在成员函数中的此指针上应用删除吗?
- 是否可以删除应用程序接收到的触摸消息(WM_POINTERDOWN等)
- 关闭应用程序并删除所有内存分配
- 调用应用程序libjingle,用户自动从花名册中删除.为什么?
- 从文本文件中读取的代码,删除停止语,然后应用大小写折叠
- 当编译一个删除停止字并应用大小写折叠的程序时,会出现一个奇怪的代码
- 删除停止语,然后应用大小写折叠(如何组合两个代码)