Я ищу способ вставки нескольких объектов типа A
внутри объекта контейнера, без копирования каждого объекта A
во время установки. Один из способов - передать объекты A
по ссылке на контейнер, но, к сожалению, насколько я читал, контейнеры STL принимают только объекты передачи по значениям для вставок (по многим причинам). Обычно это не проблема, но в моем случае я НЕ хочу, чтобы конструктор копирования был вызван, и исходный объект был уничтожен, потому что A
является оберткой для библиотеки C, с некоторыми указателями на C-стиль для структур внутри, которое будет удалено вместе с исходным объектом ...Хранение ссылок на объекты в простом контейнере
Мне нужен только контейнер, который может вернуть один из его объектов, заданный конкретным индексом, и сохранить определенное количество элементов, которое определяется во время выполнения, поэтому Я подумал, что, может быть, я могу написать свой собственный контейнерный класс, но я не знаю, как это сделать должным образом.
Другой подход заключается в том, чтобы хранить указатели до A
внутри контейнера, но поскольку у меня нет большого количества знаний по этому вопросу, что было бы правильным способом вставить указатели на объекты в контейнере STL? Например это:
std::vector<A *> myVector;
for (unsigned int i = 0; i < n; ++i)
{
A *myObj = new myObj();
myVector.pushBack(myObj);
}
может работать, но я не уверен, как справиться с этим правильно и как избавиться от него в чистом виде. Должен ли я полагаться исключительно на деструктор класса, который содержит myVector в качестве члена, чтобы избавиться от него? Что произойдет, если этот деструктор выдает исключение при удалении одного из содержащихся объектов?
Кроме того, некоторые люди предлагают использовать такие вещи, как shared_ptr
или auto_ptr
или unique_ptr
, но меня путают со множеством опций. Какой из них был бы лучшим выбором для моего сценария?
определенно * не * использовать 'auto_ptr' –
Либо' повысить :: scoped_ptr' или 'станд :: unique_ptr' будет работать -' станд :: вектор <зЬй :: unique_ptr > ' –
взглянуть либо на' vector> 'или' boost :: flyweight'. –
Keynslug