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中也存在,编程时注意一下顺序就好了。
先看看标准库中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中也存在,编程时注意一下顺序就好了。
相关文章推荐
- c++ 一个构造函数 调用 另一个 构造函数
- 【转】C++在构造函数中可以调用另一个构造函数吗
- C++中可以在构造函数中调用另一个构造函数吗?
- C++中可以在构造函数中调用另一个构造函数吗?
- C++中如何在一个构造函数中调用另一个构造函数
- 【转】 C++中如何在一个构造函数中调用另一个构造函数
- C++学习笔记-----在一个构造函数中调用另一个构造函数
- C++中如何在一个构造函数中调用另一个构造函数
- c++ 一个构造函数 调用 另一个 构造函数
- 从一道题谈C++中构造函数调用构造函数
- java中的this和super的作用和异同和C++中调用父类的构造函数
- Java和C++构造函数调用其它函数
- 浅谈C++中的构造函数分类及调用规则
- c++ 构造函数,复制构造函数,赋值构造函数,析构函数调用时机
- C++ 《Effective C++ 》条款9:永远不要在构造函数或析构函数中调用虚函数
- C++ 全局构造函数调用的顺序
- C++中函数调用中构造函数、析构函数、赋值过程
- C++中构造函数和析构函数的调用顺序
- 分析C++方式构造函数调用虚函数的问题
- 《Effective C++ 》条款9:永远不要在构造函数或析构函数中调用虚函数