gpt4 book ai didi

c++ - 我可以使用仅提供复制构造函数的类创建类对象吗?

转载 作者:行者123 更新时间:2023-11-30 03:19:41 24 4
gpt4 key购买 nike

是否可以创建仅提供复制构造器的类的实例?或者,如果删除所有其他 ctors,也删除一个 copy-ctor 是好的设计吗?

struct EmptyClass
{
EmptyClass() = delete;

// using compiler generated copy ctor.

// empty class, also nothing virtual.

void fn()
{
}
};


int main()
{
{
const EmptyClass obj(*static_cast<const EmptyClass*>(nullptr));
obj.fn();
}

// or

{
char buffer[sizeof EmptyClass]{};
const EmptyClass obj(*reinterpret_cast<const EmptyClass*>(buffer);
obj.fn();
}

return 0;
}

最佳答案

如果对象的唯一可访问非删除构造函数是复制和移动构造函数,则不可能从头创建对象的实例,但有一个异常(exception):对象可能支持聚合初始化。在你的例子中,EmptyClass 是一个集合,所以我可以这样做:

EmptyClass c{};  // doesn't call the default constructor

为了防止这种情况,我们必须先声明默认构造函数,然后将其定义为已删除:

struct EmptyClass {
EmptyClass();
};
EmptyClass::EmptyClass() = delete;

这使得 EmptyClass 不是聚合。在这种情况下,将无法创建这种类型的对象。

关于c++ - 我可以使用仅提供复制构造函数的类创建类对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53461625/

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