delete this

一般不要用,用了就要注意一下几点

1. 只能用于 new 申请的对象,不能用于栈上对象

#include <iostream>

class A
{
public:
    void func()
    {
        delete this;
    }
};

int main(int argc, char const *argv[])
{
    A *ptr = new A;
    ptr->func();
    ptr = nullptr;

    A a;
    a.func(); // 这里会挂掉
    getchar();

    return 0;
}

2. delete之后,任何成员都不能再用了

#include <iostream>
class A
{
    int x;

public:
    A() { x = 0; }

    void func()
    {
        delete this;
        std::cout << x; // 未定义行为
    }
};

int main(int argc, char const *argv[])
{
    A *obj = new A;
    obj->func();
    return 0;
}

3. 最好是,不要这样用

posted @   suntus  阅读(83)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示