要创建一个不可复制的基类的聚合初始化,可以使用C++11中的删除函数来实现。删除函数是一种特殊的成员函数,用于禁止特定的函数调用。
以下是一个示例代码,其中定义了一个不可复制的基类NonCopyable
,并使用聚合初始化来初始化其派生类Derived
:
class NonCopyable {
public:
NonCopyable() = default;
NonCopyable(const NonCopyable&) = delete; // 删除拷贝构造函数
NonCopyable& operator=(const NonCopyable&) = delete; // 删除拷贝赋值运算符
};
struct Derived : public NonCopyable {
int value;
};
int main() {
Derived d = {42}; // 使用聚合初始化来初始化Derived对象
return 0;
}
在上述示例中,基类NonCopyable
定义了两个删除函数,即拷贝构造函数和拷贝赋值运算符。这样,任何尝试复制NonCopyable
对象的操作都会被编译器报错。
派生类Derived
继承自NonCopyable
,并定义了一个value
成员变量。使用聚合初始化{42}
来初始化Derived
对象时,会自动调用基类NonCopyable
的默认构造函数,因为NonCopyable
是一个聚合类型。
总结起来,通过使用删除函数来禁止特定的函数调用,可以实现不可复制的基类的聚合初始化。
下一篇:不可复制类型的数组初始化