2016-02-29 2 views
0

Я новичок в C++ 11, поэтому, пожалуйста, будьте милы.Как заменить c-указатель на shared_ptr?

Не могли бы вы показать мне простой пример того, как shared_ptr может заменить стандартный указатель? Я также ценю объяснение, если в этом случае это не имеет смысла.

например. Не могли бы вы преобразовать этот код?

std::vector <CVariant*>liste; 
liste.push_back(new CVariant((unsigned int) 24, Parameter1", TYPE_UINT)); 
std::cout << liste.at(0)->get<int>() <<"\n"; 
delete liste.at(0); 

->

std::vector < std::shared_ptr<CVariant> >liste; 

???

ответ

2

Если я не ошибается, вы должны сделать что-то вроде этого:

std::vector<std::shared_ptr<CVariant>> liste; 

liste.push_back(std::make_shared<CVariant> (arguments...)); 

Проверить эту link

Надеется, что это помогает.

+1

Да, который работает. Вы также можете напрямую использовать конструктор shared_ptr: 'liste.push_back (std :: shared_ptr (новый CVariant (аргументы ...)))' Посмотрите: http://www.cplusplus.com/справочник/память/shared_ptr/shared_ptr / –

2

Если у вас есть список вектора, как этот

std::vector < std::shared_ptr<CVariant> >liste; 

Вы должны вызвать метод liste.push_back с общим указателем вместо указателей. Вы можете инициализировать общие указатели в C, как это:

auto pointer = std::make_shared<CVariant>((unsigned int) 24, Parameter1", TYPE_UINT); 

Ant добавить указатель на список, как это:

liste.push_back(pointer); 
Смежные вопросы