Не копируемый объект и исключение в конструкторе копирования и операторе = - PullRequest
3 голосов
/ 14 октября 2011

Я хотел бы сделать объект класса не копируемым, поэтому я поместил конструктор копирования и оператор = в приватный раздел.Однако один класс является другом этого класса, поэтому он имеет доступ к закрытым методам.Является ли хорошей идеей поместить исключение броска в конструктор копирования и оператор =, чтобы быть уверенным, что объект не будет скопирован?

Ответы [ 2 ]

6 голосов
/ 14 октября 2011

Один из способов сделать его не копируемым - просто объявить конструктор копирования, но не реализовывать его вообще. Это приведет к ошибке компоновщика во время компиляции, если кто-то попытается его использовать.

class foo
{
private:
    foo(const foo&); // not defined
    foo& operator=(const foo&); // not defined
};
3 голосов
/ 14 октября 2011

@ Mysticial ответили на этот вопрос, который обычно делается на C ++ 03.Но в C ++ 11 вы можете сделать это более красиво:

class foo
{
private:
    foo(const foo&) = delete; 
    foo& operator=(const foo&) = delete; 
};

=delete передает сообщение о том, что foo не поддерживает семантику копирования, так как он был явно отключенотмечая это delete.Я объяснил это подробно здесь:

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