我有一个非指针类成员,我需要在构造函数中初始化:
class Alerter {
protected:
Timer timer;
public:
Alerter(int interval);
};
Run Code Online (Sandbox Code Playgroud)
然后
Alerter::Alerter(int interval) {
timer = createTimer(interval);
}
Run Code Online (Sandbox Code Playgroud)
(简化代码只是为了演示问题).
我有一些疑问和担忧,timer
可能是首先使用其无参数构造函数创建的,之后该实例将被createTimer
函数返回的内容覆盖.
方法有多好?可能的答案可能是:
哪些假设(或其他可能的东西)最正确?
Hol*_*olt 11
timer
首先是默认构造然后分配.当然,您可以假设Timer
默认构造或编译器优化有多便宜,但是在这里您不需要这个,因为可以通过使用初始化列表来阻止默认构造:
Alerter::Alerter(int interval) : timer(createTimer(interval)) { }
Run Code Online (Sandbox Code Playgroud)
除非您的Timer
类是可复制的,但不是可复制构造的,否则这将起作用,这很奇怪.