您的位置:首页 > 编程语言 > C语言/C++

c++:在类的构造函数中调用另一个构造函数

2010-10-16 13:08 295 查看
在java里,经常可见类的构造函数调用另一个构造函数,但是在c++里,由于构造函数允许有默认参数,使得这种需求大为减少。虽然这样,也许偶尔我们还是希望在类的构造函数里调用另一个构造函数。我们知道,构造一个对象时会做两件事:1,分配内存 2,执行构造函数;所以在构造函数里调用另一个构造函数的关键是让第二个构造函数在第一次分配好的内存上执行,而不是分配新的内存,这个可以用标准库的placement new做到:

先看看标准库中placement new的定义
inline void *__cdecl operator new(size_t, void *_P)
{return (_P); }

可见没有分配新的内存。

#include

class my
{
public:
my()
{
new (this) my(5);
}

my(int i)
{
a=i;
}

int a;
};

使用这个方法需要注意,如果第一个构造函数里初始化了某个成员变量,然后调用另一个构造函数,在这个构造函数里又初始化了同一个成员变量,这样就会造成同一个成员变量初始化了两次。但这种问题在java中也存在,编程时注意一下顺序就好了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: