首页 > 解决方案 > 从复制构造函数调用构造函数

问题描述

从 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)
    {

    }
};

这种方法有什么不良影响吗?编写传统的复制构造函数有什么好处吗?

标签: c++c++11copy-constructor

解决方案


那么我们可以每次都调用构造函数而不是定义复制构造函数吗?

是的你可以

委托构造函数的优点之一是通过在一些可能需要一组完整参数的构造函数中进行通用初始化来避免代码重复。

编写传统的复制构造函数有什么好处吗?

进行构造委托的能力与定义复制构造函数或任何其他特殊构造函数的需要无关。如有必要,您需要定义它们。


推荐阅读