конструктор личных копий: disallow - PullRequest
4 голосов
/ 10 июня 2011

Я программирую в библиотеке с открытым исходным кодом, в которой очень мало комментариев в коде, и абсолютно нет документации, связанной с кодом, или таких комментариев, которые абсолютно ничего не показывают или полностью сбивают с толку.Примерный класс библиотеки иногда определяется следующим образом (это краткий краткий пример):

class A
{
    private:

    // Disallow default bitwise copy construct. 
    A (const A& Acopy) { data = Acopy.data; };

    int data;

    public:

    A() {};

    A (int arg) : data(arg) {};

    A(const A& Acopy) { data = Acopy.data; };

};

Комментарий "Конструкция побитового копирования по умолчанию Dissalow" перед частной копиейКонструктор будет указывать на тот факт, что когда я определяю тип, мне нужно определить свой собственный конструктор копирования, чтобы компилятор не мог двусмысленно «сгенерировать» меня.Это то, что я узнал до сих пор на эту тему.Но в этом случае конструктор является private , и компиляция прерывается в этой форме.

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

Томислав

Ответы [ 5 ]

9 голосов
/ 10 июня 2011

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

2 голосов
/ 10 июня 2011

Суть, как вы сказали, состоит в том, чтобы избежать генерации конструкторов копирования по умолчанию, но не только в этом - это private, чтобы фактически не использовать его. Смысл делать его приватным - не допускать его использования.

2 голосов
/ 10 июня 2011

Я думаю, что компиляция прерывается, потому что конструктор копирования определяется дважды, один раз как закрытый, а второй как открытый.возвращается по значению.Почему кто-то захочет сделать это - другой вопрос, на который я не могу ответить.

2 голосов
/ 10 июня 2011

Обычно конструктор копирования делается закрытым, чтобы запретить передачу объектов по значению.

0 голосов
/ 10 июня 2011

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

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