Вызов конструктора из конструктора копирования - PullRequest
0 голосов
/ 28 декабря 2018

Из 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)
    {

    }
};

Есть ли какие-либо негативные последствия для этого подхода?Есть ли преимущество написания традиционного конструктора копий?

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Таким образом, вместо определения конструктора копирования, мы можем каждый раз вызывать конструктор?

Да, вы можете.

Есть ли какой-либо вред для этогоподход?Есть ли какое-то преимущество в написании традиционного конструктора копий?

С точки зрения поведения, ваш подход не принесет вреда.С имеющимися у вас переменными-членами IMO ваш подход является наиболее подходящим.

0 голосов
/ 28 декабря 2018

То есть, вместо определения конструктора копирования, мы можем каждый раз вызывать конструктор?

Да, вы можете

Одним из преимуществ делегирования конструкторов является избежание дублирования кодаИмея общую инициализацию в некоторых конструкторах, для которых может потребоваться полный набор аргументов.

Есть ли преимущество написания традиционного конструктора копирования?

Возможность выполнять делегирование конструкциине связано с необходимостью определения конструктора копирования или любых других специальных конструкторов.Вы должны определить их при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...