C++ 防止';删除[]和#x27;来自源对象';阻止析构函数释放我们的';刚刚被盗的数据';

C++ 防止';删除[]和#x27;来自源对象';阻止析构函数释放我们的';刚刚被盗的数据';,c++,C++,发件人: 我们在这里做了什么?我们没有深入复制堆数据,而是复制了指针,然后将原始指针设置为null(,以防止源对象的析构函数中的“delete[]”释放我们的“刚刚窃取的数据”)。实际上,我们“窃取”了最初属于源字符串的数据 请用粗体解释上述报价中的行 这是一个右值,那么如何从源对象的析构函数中删除它呢?请举例说明。措辞可能有点误导 提到的“源”是“源对象”,即所指的对象,即 如果你看到这样的东西,可能会更容易理解 // Need std::move to turn source_object

发件人:

我们在这里做了什么?我们没有深入复制堆数据,而是复制了指针,然后将原始指针设置为null(,以防止源对象的析构函数中的“delete[]”释放我们的“刚刚窃取的数据”)。实际上,我们“窃取”了最初属于源字符串的数据

请用粗体解释上述报价中的行


这是一个右值,那么如何从源对象的析构函数中删除它呢?请举例说明。

措辞可能有点误导

提到的“源”是“源对象”,即
所指的对象,即

如果你看到这样的东西,可能会更容易理解

// Need std::move to turn source_object into an rvalue reference
string destination_object(std::move(source_object));

把片段放在引语之前。您可能知道
string
在销毁[]数据时会
delete

~string()
{
    delete[] data;
}

没有
that.data=nullptr
,当
that
被破坏时,它会释放
that.data
aka
this->data
,因为
data=that.data


链接中的“Source”是指
即无
that.data=nullptr
,当
本->数据
数据=that.data而被破坏时,它将释放
本->数据。链接中的“Source”表示
@LouisGo请求:写一个答案。此函数缺少第一行-它应该
删除[]此->数据否则以前分配的数组将泄漏。@user7860670请写一个答案。@user7860670这似乎是一个构造函数,这意味着以前没有分配数组。
~string()
{
    delete[] data;
}