我有一个非指针类成员,我需要在构造函数中初始化:
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 – 非指针类成员:它有多好?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)