C++ 防止';删除[]和#x27;来自源对象';阻止析构函数释放我们的';刚刚被盗的数据';
发件人: 我们在这里做了什么?我们没有深入复制堆数据,而是复制了指针,然后将原始指针设置为null(,以防止源对象的析构函数中的“delete[]”释放我们的“刚刚窃取的数据”)。实际上,我们“窃取”了最初属于源字符串的数据 请用粗体解释上述报价中的行C++ 防止';删除[]和#x27;来自源对象';阻止析构函数释放我们的';刚刚被盗的数据';,c++,C++,发件人: 我们在这里做了什么?我们没有深入复制堆数据,而是复制了指针,然后将原始指针设置为null(,以防止源对象的析构函数中的“delete[]”释放我们的“刚刚窃取的数据”)。实际上,我们“窃取”了最初属于源字符串的数据 请用粗体解释上述报价中的行 这是一个右值,那么如何从源对象的析构函数中删除它呢?请举例说明。措辞可能有点误导 提到的“源”是“源对象”,即所指的对象,即 如果你看到这样的东西,可能会更容易理解 // Need std::move to turn source_object
这是一个右值,那么如何从源对象的析构函数中删除它呢?请举例说明。措辞可能有点误导
提到的“源”是“源对象”,即所指的对象,即
如果你看到这样的东西,可能会更容易理解
// 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
akathis->data
,因为data=that.data代码>
链接中的“Source”是指即即即无that.data=nullptr
,当即即即即即本->数据因数据=that.data而被破坏时,它将释放即本->数据代码>。链接中的“Source”表示即
@LouisGo请求:写一个答案。此函数缺少第一行-它应该删除[]此->数据代码>否则以前分配的数组将泄漏。@user7860670请写一个答案。@user7860670这似乎是一个构造函数,这意味着以前没有分配数组。
~string()
{
delete[] data;
}