构造类有两种方法:
class Cell{
public:
Cell(int cellID, int nx);
~Cell();
private:
int cellID_;
int nx;
};
Run Code Online (Sandbox Code Playgroud)
第一种方式:
Cell::Cell(int cellID, int nx)
: cellID_(cellID), nx_(nx){}
Run Code Online (Sandbox Code Playgroud)
第二种方式:
Cell::Cell(int cellID, int nx){init(cellID, nx)}
void Cell::init(int cellID, int nx){
cellID_ = cellID;
nx_ = nx;
}
Run Code Online (Sandbox Code Playgroud)
Alo*_*ave 10
第一个是最好的,因为它在真正意义上初始化对象,而不像第二个方法分配已经初始化的对象.
请注意,使用第二种方法时会有一些开销:
如您所见,在后者中存在创建和分配的额外开销,这对于用户定义的类可能是相当大的.
Cost of Member Initialization = Object Construction
Cost of Member Assignment = Object Construction + Assignment
Run Code Online (Sandbox Code Playgroud)
如果成员是内置/ POD数据类型,则没有开销,但如果成员是非POD类型,则开销很大.
请注意,在某些情况下,您将被迫使用成员初始化列表:
无法分配此类成员,但必须在成员初始化列表中初始化它们.
鉴于以上作为实践,第一种方法总是优选的.
第一个几乎总是首选.这是必要的是引用,任何成员const或仅仅需要初始化(即,不能被默认的构造).在其他情况下,它可以通过直接初始化成员对象而不是默认构造来减少额外的工作,然后再分配给它.
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |