Как создать контейнер из не копируемых элементов

Есть ли способ использовать контейнеры STL с не копируемыми элементами?

что-то вроде этого:

class noncopyable
{
    noncopyable(noncopyable&);
    const noncopyable& operator=(noncopyable&);
public:
    noncopyable(){};
};

int main()
{
    list<noncopyable> MyList; //error C2248: 'noncopyable::noncopyable' : cannot access private member declared in class 'noncopyable'
}

3 ответа

Решение

Нет, не копируемые элементы не могут быть в классах контейнера C++.

Согласно стандарту 23.1 пункта 3 "Тип объектов, хранящихся в этих компонентах, должен отвечать требованиям CopyConstructible типы (20.1.3) и дополнительные требования Assignable типы ".

Один из вариантов - создать список указателей на элементы (предпочтительно, shared_ptr). Это не совсем то, что вы хотите, но это сделает работу.

Другой вариант - использовать библиотеку Boost Pointer Container. Это действует так же, как стандартный контейнер std::auto_ptrs, если бы это было возможно: он сохраняет исключительное право собственности на свои элементы и не может быть скопирован. Он также имеет меньше накладных расходов, чем стандартный контейнер shared_ptrs.

Другие вопросы по тегам