Скопируйте, но не двигайте - PullRequest
5 голосов
/ 02 января 2011

В C ++ 0x допустимо / ожидается, что некоторые классы можно копировать, но не перемещать?Я смотрю на реализацию гетерогенного класса, который изменяет размеры, и я не уверен, что справился бы с этим, если бы некоторые классы нуждались в копировании, а некоторые - в перемещении.

Ответы [ 2 ]

5 голосов
/ 02 января 2011

Да, класс допустим для копирования, но не для перемещения:

class MyClass {
public:
    /* Copyable... */
    MyClass(const MyClass&);
    MyClass& operator= (const MyClass&);

    /* ... but not movable. */
    MyClass(MyClass&&) = delete;
    MyClass& operator= (MyClass&&) = delete;
};

Однако я не могу придумать вескую причину того, почему кто-то захочет это сделать. Зная кодеры C ++ (как и я!), Я думаю, вы должны ожидать, что это может произойти.

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

0 голосов
/ 02 января 2011

Я вполне уверен, что создание защищенного / частного конструктора перемещения - это способ ограничения возможности перемещения объектов этого класса. Если вы можете ожидать, что в шаблоне? Я так не думаю. Вам понадобится std::enable_if для такого рода проверки.

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