为什么析构函数在调用?

Why destructor is calling?

我有一个简单的代码。

#include <iostream>

struct BABE
{
    std::string* babe = nullptr;

    BABE(const char* str)
    {
        babe = new std::string(str);
    }
    ~BABE()
    {
        delete babe;
    }
};

int main()
{
    BABE bomb = "hello";
    bomb = "world";
    
    system("pause");
    return 0;
}

当我尝试

bomb = "world";

它分配得很好,但是析构函数正在调用。

为什么会这样?


Why is it happening?

因为在这一行中:

bomb = "world";

要将 const char * 分配给您的 class,将创建一个临时结构 BABE,该临时分配给 bomb(使用编译器生成的赋值运算符),然后那个临时的被破坏。

由于您违反了 Rule of 3/5/0,赋值会导致灾难 - 内存泄漏和同一指针的双重删除。