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

来源:互联网 发布:mac选中多个连续文件 编辑:程序博客网 时间:2024/05/01 04:32
在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中也存在,编程时注意一下顺序就好了。
原创粉丝点击