Предположим, у вас есть класс NonCopyable
class NonCopyable
{
public:
NonCopyable(int n){}
~NonCopyable(){}
[...]
private:
[members...]
private:
NonCopyable( const NonCopyable& ); //disabled (no definition)
NonCopyable& operator= ( const NonCopyable& ); //disabled (no definition)
};
Для этого класса нелогично иметь его копии, поэтому конструктор копирования и оператор присваивания отключены.
Однако, когда вынужен вектор объектов NonCopyables:
std::vector<NonCopyable> m_V;
int n;
m_V.push_back(NonCopyable(n));
Здесь вы неявно вызываете конструктор копирования.
Меня учили решать эту проблему, используя указатели на эти объекты вместо объектовсамих себя.Но это раздражает как в использовании, так и в производительности, потому что вы должны динамически распределять эти объекты с помощью new () ...
Мой вопрос: есть ли способ обойти это?Какое общее решение этой проблемы?