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

目录
相关文章
|
7月前
|
C#
C# 继承类中(父类与子类)构造函数的调用顺序
C# 继承类中(父类与子类)构造函数的调用顺序
|
28天前
类的无参方法
类的无参方法
10 0
|
8月前
|
Java
什么是构造器?
什么是构造器?
72 0
|
9月前
|
程序员
为什么子类会调用父类无参的构造函数
为什么子类会调用父类无参的构造函数
|
Java C++
C++类中在构造器中调用本类的另外构造器
C++类中在构造器中调用本类的另外构造器
78 0
学生类-构造函数
学生类-构造函数
111 0
|
编译器
类的构造函数
类的构造函数
129 0
|
Python
8.2 类的构造器
class ren():     '''this class is about ren class。类的说明,使用三个单引号'''     def __init__(self,name,sex):        # 构造器         # 注意到 __init__ 方法的...
653 0
父类中如果没有无参构造方法(也即父类中只给了带参构造方法),子类的构造方法怎么办?
父类中如果没有无参构造方法(也即父类中只给了带参构造方法),子类的构造方法怎么办? /* 父类中如果没有无参构造方法(也即父类中只给了带参构造方法),子类的构造方法怎么办?   法1:子类的构造方法通过 super(...); 去显示调用父类的带参构造方法。
1149 0