从c ++ 11开始,我们可以从另一个构造函数调用一个构造函数。因此,除了定义副本构造函数之外,我们还可以每次调用该构造函数吗?就像这段代码一样:
class MyString
{
private:
char *ptr;
int m_length;
public:
MyString(const char *parm = nullptr) : m_length(0), ptr(nullptr)
{
if (parm)
{
m_length = strlen(parm) + 1;
ptr = new char[m_length];
memcpy(ptr, parm, m_length);
}
}
MyString(const MyString &parm) : MyString(parm.ptr)
{
}
};
这种方法是否有不良影响?编写传统的复制构造函数有什么好处?
答案 0 :(得分:2)
因此,除了定义副本构造函数之外,我们还可以每次调用该构造函数吗?
是的,您可以
委派构造函数的优点之一是通过在某些可能需要全套参数的构造函数中进行通用初始化来避免代码重复。
编写传统的复制构造函数有什么优势吗?
进行构造委派的能力与定义副本构造函数或任何其他特殊构造函数的需求无关。您需要根据需要定义它们。
答案 1 :(得分:0)
因此,除了定义副本构造函数之外,我们还可以每次调用该构造函数吗?
是的,可以。
这种方法是否有不良影响?编写传统的复制构造函数有什么好处?
在行为上,您的方法不会有不良影响。有了成员变量,IMO最适合您的方法。