boost ptr_vector: передача права собственности на все выделенные объекты

#c #boost

#c #boost

Вопрос:

Освобождает ли ptr_vector право собственности на содержащиеся объекты, когда он передается в качестве аргумента функции?

 class MyClass {
    void MyClass::consume(ptr_vector<Object>amp; objects)
    {        
        boost::swap(objects,objects_);
    }
    ptr_vector<Object> objects_;
};

void foo()
{
ptr_vector<Object> objects;
objects.push_back( new Object() );

     MyClass myClass;
     myClass.consume(objects);
 }
  

Я хочу иметь возможность:

  1. Сохраните список объектов, выделенных в куче, в виде списка.

  2. Передайте список в MyClass. Затем MyClass становится владельцем этого списка, сохраняет его в элементе.

  3. После возврата MyClass::consume вызывающий больше не имеет доступа к объектам.

Я не уверен, является ли ptr_vector подходящим контейнером.

Комментарии:

1. Я полагаю, у него есть swap метод? — Я не понимаю, как вы могли бы «использовать» неизменяемый вектор.

2. ptr_vector<Object> objects(); является объявлением функции. Пожалуйста, попробуйте скомпилировать код перед публикацией. Не заставляйте нас сначала исправлять ваш код, а затем отвечать на вопрос.

3. @UncleBens ваше предложение сделало свое дело. Если вы хотите опубликовать ответ, я был бы рад его принять.

4. @Nawaz: я исправил все ошибки и обновил код, чтобы использовать предложение UncleBens.

5. @CandyChiu: Что находится pointers в функции? Вы его скомпилировали?