C++类中在构造器中调用本类的另外构造器

简介: C++类中在构造器中调用本类的另外构造器

一个类中,构造器有多个,参数有所差异,而执行内容由相似.这个时候,当然是在一个构造器中调用另外一个构造器.在JAVA中通过this可以很容易的实现.在C++中,必须使用特殊方式.


在构造器中调用通用的init()成员函数.这样的好处是外部也可以显式初始化.

正确办法

编译时要加参数:g++ -std=c++11

template <class TYPE>
SafeArray<TYPE>::SafeArray(const int size) : SafeArray<TYPE>(size, __FILE__, __FUNCTION__, __LINE__)
{
    //
}
template <class TYPE>
SafeArray<TYPE>::SafeArray(const int size, const char* pFile, const char* pFunction, const int nLine)
{
    ....
}
  • 疑问方法

  以下编译成so时可以通过,单独编译时出错.

template <class TYPE>
SafeArray<TYPE>::SafeArray(const int size)
{
    new (this)SafeArray<TYPE>(m_nSize, __FILE__, __FUNCTION__, __LINE__);
}
template <class TYPE>
SafeArray<TYPE>::SafeArray(const int size, const char* pFile, const char* pFunction, const int nLine)
{
    ......
}

转帖一点内容:

  这种技术名字叫placement new,与一般的operator new不一样。

  new (pointer)构造函数() 里面,看括号里面的是一个指针整句话的意思就是生成一个对象,然后将对象放在指针指向的地址那里。这种方法可以在任意地方构造对象。

目录
相关文章
C# 继承类中(父类与子类)构造函数的调用顺序
C# 继承类中(父类与子类)构造函数的调用顺序
|
2月前
|
Java 程序员 C#
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
14 0
|
7月前
类的无参方法
类的无参方法
|
Java
什么是构造器?
什么是构造器?
104 0
为什么子类会调用父类无参的构造函数
为什么子类会调用父类无参的构造函数
|
Java C++
C++类中在构造器中调用本类的另外构造器
C++类中在构造器中调用本类的另外构造器
99 0
|
C++
C++类的静态方法
C++类的静态方法
84 0
学生类-构造函数
学生类-构造函数
190 0
|
编译器
类的构造函数
类的构造函数
159 0