gpt4 book ai didi

c++ - 是否可以通过删除基类中的复制构造函数/运算符来使派生类不可复制?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:43:13 25 4
gpt4 key购买 nike

Pre C++11,我问这是否可以使用私有(private)/未实现的技巧(参见 here)。显然,这是不可能的。

我想知道新的 = delete 语法是否改变了事态,因为强制派生类不可复制仍然是一个有用的特性。

更新后的代码片段可能看起来像这样:

class Base 
{
public:
Base() {}
virtual ~Base() {}
Base(const Base&) = delete;
Base& operator=(const Base&) = delete;

virtual void interfaceFunction() = 0;
// etc.

// no data members
};

class Data { /* ... */ };
class Derived : public Base // is this class uncopyable ?
{
Derived() : managedData(new Data()) { }
~Derived() ( delete managedData; }

virtual void interfaceFunction() override { /* ... */ }

Data* managedData;
};

最佳答案

不,派生类可以随意在其复制构造函数/赋值运算符中构造Base

class Derived : public Base {
public:
Derived(){}
Derived(const Derived&) : Base() {}
void interfaceFunction() override {}
};

关于c++ - 是否可以通过删除基类中的复制构造函数/运算符来使派生类不可复制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37595775/

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