Предположит, у вас есть класс 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() ...
Мой вопрос: Есть ли способ обойти это? Какое общее решение этой проблемы?
Ваш вопрос, кажется ... –
Серьезный вопрос, если это нелогично иметь «как я могу использовать не Copyable объект в ситуации, когда мне нужно скопировать этот объект?» копирует вне вектора, почему бы лучше иметь копии, если они находятся внутри вектора? :) –
это не должно быть копией, это моя точка зрения. Я хочу снабдить вектор уникальным объектом, если вы получите мне – xcrypt