gpt4 book ai didi

c++ - 以下代码片段 C++ 的说明

转载 作者:太空宇宙 更新时间:2023-11-04 11:44:49 26 4
gpt4 key购买 nike

我正在阅读 C++11 Faq并遇到了这段代码。我对 C++ 编码有了更好的理解,但我仍然无法理解下面的代码。

    template<class T>
class Handle {
T* p;
public:
Handle(T* pp) : p{pp} {}
~Handle() { delete p; } // user-defined destructor: no implicit copy or move

Handle(Handle&& h) :p{h.p} { h.p=nullptr; }; // transfer ownership
Handle& operator=(Handle&& h) { delete p; p=h.p; h.p=nullptr; return *this; } // transfer ownership

Handle(const Handle&) = delete; // no copy
Handle& operator=(const Handle&) = delete;

// ...
};
  • “转让所有权”是什么意思?
  • 为什么复制构造函数等同于“delete”?它有什么用?

如果有人可以添加一些示例并进行解释,那将是一个很大的帮助。

最佳答案

它是一个移动构造函数,C++11 中引入的特殊 && 语法采用右值引用,因此对没有名称且不能在其他任何地方引用的变量的引用代码。

构造函数中发生的事情是 Handle窃取 的方式获取通过移动构造函数传递的 Handle 的所有权(将术语传递给我)内部的 T* p 将其值分配给它自己的变量,然后将 nullptr 设置为传递的右值的变量。

之所以使用它是因为您实际上并不需要复制右值,因为该值将不再在代码中使用,因此只获取其数据是安全的,这避免了可能代价高昂的复制构造函数。

关于c++ - 以下代码片段 C++ 的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20151358/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com