c – 删除构造函数后的初始化

c – 删除构造函数后的初始化,第1张

概述我的问题是:在删除构造函数之后是否有任何方法来初始化类?例如 class A{ public: A() = delete; int a = 42; int fun(){ a += 1; return a; }}; 现在不应该使用这个类.例如,你不能: A* instance 我的问题是:在删除构造函数之后是否有任何方法来初始化类?例如

class A{    public:        A() = delete;        int a = 42;        int fun(){            a += 1;             return a;        }};

现在不应该使用这个类.例如,你不能:

A* instance = (A*)malloc(sizeof(A));instance->fun(); //segfault

A instance; //compile error undefined function

假设由于一些奇怪的原因你实际上想要使用删除了构造函数的类,有没有办法可以做到?这没有像重写构造函数那样做.

我知道这是一个奇怪的问题,但我有兴趣知道某人是否有(也许是模糊的)这样做的方式.谢谢!

解决方法 如果类是聚合,则可以使用聚合初始化创建一个聚合初始化,而不会调用A的构造函数.例如:

A a = { 1 };

在C 11中,由于存在= 42,所以你的班级不是聚合的.所以在C 11中你的班级是无法使用的.

但是在C 14中这已经改变了,并且= 42并不能阻止该类成为聚合,因此它可以再次使用.

总结

以上是内存溢出为你收集整理的c – 删除构造函数后的初始化全部内容,希望文章能够帮你解决c – 删除构造函数后的初始化所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1217090.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存