首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有自定义析构函数的“不可复制”

具有自定义析构函数的“不可复制”
EN

Stack Overflow用户
提问于 2016-04-30 02:32:16
回答 1查看 143关注 0票数 0

我需要一个具有声明析构函数的noncopyable类,而朴素的方法不起作用:参见https://ideone.com/mU8aoc。析构函数有什么问题,为什么移动不像没有它那样工作呢?当然,如何解决呢?

作为参考,完整的代码(与上面的ideone链接相同):

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-30 02:49:06

要使代码工作,class C必须是可移动的。当它没有声明的析构函数时,它将得到一个编译器生成的隐式移动构造函数(以及移动赋值操作符)。但是当它有一个声明的(用你的话说是“自定义”)析构函数时,移动构造函数(和移动赋值操作符)就不再隐式地提供了。这是为了您的安全:假设如果您需要一个显式析构函数,您也需要显式移动函数。

参考资料:constructor

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36950057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档