c – 非指针类成员:它有多好?

c – 非指针类成员:它有多好?,第1张

概述参见英文答案 > calling constructor of a class member in constructor                                    5个 我有一个非指针成员,我需要在构造函数中初始化: class Alerter {protected: Timer timer;public: Alerter(int interval) 参见英文答案 > calling constructor of a class member in constructor5个
我有一个非指针类成员,我需要在构造函数中初始化:
class Alerter {protected:  Timer timer;public:  Alerter(int interval);};

然后

Alerter::Alerter(int interval) {    timer = createTimer(interval);}

(简化代码只是为了演示问题).

我有些疑惑和担心,计时器可能首先使用其无参数构造函数创建,稍后该实例将被createTimer函数返回的内容覆盖.

方法有多好?可能的答案可能是:

>由无参数构造函数创建的“空计时器”实际上并未创建,因为编译器足够聪明,可以发现我们从未
在覆盖值之前引用它.
>创建了空计时器,但这是正常的,因为编写良好的代码应支持一次性实例的廉价无参数构造函数.
>最好使用指针.

哪些假设(或其他可能的东西)最正确?

解决方法 计时器首先默认构造然后分配.当然,你可以假设Timer的默认构造价格或编译器优化有多便宜,但在这里你不需要这个,因为可以通过使用初始化列表来阻止默认构造:
Alerter::Alerter(int interval) : timer(createTimer(interval)) { }

这将起作用,除非您的Timer类是可复制分配但不是可复制构造的,这可能很奇怪.

总结

以上是内存溢出为你收集整理的c – 非指针类成员:它有多好?全部内容,希望文章能够帮你解决c – 非指针类成员:它有多好?所遇到的程序开发问题。

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

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

原文地址: https://outofmemory.cn/langs/1237568.html

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

发表评论

登录后才能评论

评论列表(0条)

保存