gpt4 book ai didi

c++ - `noncopyable` 带有自定义析构函数

转载 作者:行者123 更新时间:2023-11-28 05:41:47 25 4
gpt4 key购买 nike

我需要一个 noncopyable 类,它有一个声明的析构函数,天真的方法不起作用:参见 https://ideone.com/mU8aoc .析构函数有什么问题,为什么 move 与没有析构函数的方式不同?当然,如何修复它?

供引用,完整代码(与上面的ideone链接相同):

class noncopyable {
public:
noncopyable(noncopyable &&) noexcept;

noncopyable &operator=(noncopyable &&) noexcept;

protected:
noncopyable() = default;

~noncopyable() = default;

noncopyable(const noncopyable &) = delete;

noncopyable &operator=(const noncopyable &) = delete;
};

class C: noncopyable {
public:
// compiles if this line is uncommented
// C(C&& c);

C() {}

// also compiles if this is commented
~C() {}
};

C a() {
return {};
}

C b() {
return a();
}

int main() {
return 0;
}

最佳答案

要让您的代码正常工作,class C 必须是可 move 的。当它没有声明的析构函数时,它会获得编译器生成的隐式 move 构造函数(和 move 赋值运算符)。但是当它有一个声明的(用你的说法是“自定义”)析构函数时, move 构造函数(和 move 赋值运算符)不再隐式提供。这是为了您的安全:假定如果您需要显式析构函数,您也将需要显式 move 函数。

引用:http://en.cppreference.com/w/cpp/language/move_constructor

关于c++ - `noncopyable` 带有自定义析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36950057/

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