【发布时间】:2021-07-02 08:40:00
【问题描述】:
下面的程序有内存泄漏吗?
main()
{
std::string DD("paramhansa");
std::string SS("yogananda");
DD = std::move(SS);
}
请考虑字符串足够大以存储在堆中。
DD 指向的内存发生了什么变化? 它在移动任务中被破坏了吗? 这是内存泄漏吗?
【问题讨论】:
-
移出的对象将保持可破坏状态。当它离开的时候,析构函数将在
SS上被调用,而不影响DD与DD的旧值相同,它是安全管理的。 -
你有什么证据表明会有内存泄漏?
-
您认为标准库为什么会在其实现中允许内存泄漏?
-
和
DD = SS;一样,内存由std::string管理 -
所以如果语句像 obj1 = std::move(obj2) ...... 会调用 obj1 的析构函数吗?自动