Укажите конструктор копирования, который не будет использоваться в качестве конструктора копирования - PullRequest
0 голосов
/ 25 июня 2018

У меня есть класс A. В этом классе он содержит указатель на другой A.

class A
{
    A* sub = NULL;
};

Я хочу иметь пустой конструктор, по умолчанию этот указатель равен NULL, и другой конструктор, который передаетуказатель / ссылка.Этот второй конструктор скопировал бы параметр в объект new A() и передал бы sub из параметра в себя.
класс сейчас:

class A
{
    A* sub = NULL
    A(A* source)
    {
        this->sub = new A(*source);//copy the source 'A'

        // we now have a copy of "source" and all of its children
        // but to prevent the "source" from deleting our new
        // children (destructor deletes children recursively),
        // "source"s children are disconnected from "source"
        source->sub = NULL;

        // this invalidates sub, but that is desired for my class
    }
}

Пока нет проблем с этим.Вместо этого проблема в том, что я хотел, чтобы переменная «source» была ссылкой.Теперь это проблема, потому что это заставит конструктор иметь подпись конструктора копирования.

Есть ли способ сообщить компилятору, что это не следует рассматривать как конструктор копирования?Если это возможно, должно ли это быть сделано?

1 Ответ

0 голосов
/ 25 июня 2018

То, что вы пытаетесь достичь, называется конструктор перемещения .В частности, это точное поведение достигается с помощью std::unique_ptr.

...