为什么析构函数在调用?
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,赋值会导致灾难 - 内存泄漏和同一指针的双重删除。
我有一个简单的代码。
#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,赋值会导致灾难 - 内存泄漏和同一指针的双重删除。