2010-09-01 2 views
1

Общих указателей позволяют создать указатель на указатель:Общие указатели: указатель на указатель

void foo(Object **o) {} 

int main() 
{ 
    Object * o = new Object(); 
    foo(&o); 
} 

Есть ли аналогичная конструкция для shared_ptr?

void foo(std::shared_ptr <Object> *o) {} 

int main() 
{ 
    std::shared_ptr <Object> o(new Object()); 
    foo(&o); 
} 
+0

Что вы пытаетесь достичь? Если у вас нет особых причин не делать этого, проще всего вернуть объект по значению или хотя бы вернуться владение, передающее интеллектуальный указатель по значению. Взяв указатель на указатель или указатель на интеллектуальный указатель, чтобы указать его на динамически все Объект ocate обычно не нужен в C++. –

ответ

2

Без тестирования этого, я уверен, что вы хотите:

shared_ptr<shared_ptr<T> > o(new shared_ptr<T>(new T())); 

Edit: забыли «новый» после того, как первый «(» и фиксированные нестандартное использование> > в определении шаблона (по крайней мере, не стандартно до C++ 0x)

+0

И, конечно, подпись для foo() будет: void foo (std :: shared_ptr > o); –

+0

Несомненно, он ищет что-то более простое, например параметр: shared_ptr * p' и реализация 'p-> reset (new T)'. Хотя даже это выглядит неуклюжим для меня. –

Смежные вопросы