2010-12-07 4 views
2

Мне нужно создать функцию, которая возвращает выделенную переменную shared_ptr. это правильный путь?выделить shared_ptr в функции

typedef boost::shared_ptr<std::vector<char> > sharePtr; 

void createPtr(sharePtr &p) 
{ 
    p = sharePtr(new std::vector<char>); 
} 

void test() 
{ 
    sharePtr p; 
    createPtr(p); 
} 

ответ

4

Да, это правильно. Но почему бы не написать просто:

sharedPtr createPtr() 
{ 
    return sharePtr(new std::vector<char>); 
} 

void test() 
{ 
    sharePtr p = createPtr(); 
} 

? Это может быть быстрее, чем ваша версия, и быстрее, даже когда компилятор поддерживает семантику перемещения.

Также рекомендуется использовать make_shared вместо прямого new:

sharedPtr createPtr() 
{ 
    return make_shared<std::vector<char>>(); 
} 

, потому что он может избежать выделения памяти для счетчика ссылок.

+1

Контр-рекомендация для `make_shared` заключается в том, что если объект большой (для которого` vector` нет), и если вы используете слабые указатели (чего нет у этого кода), тогда `make_shared` может теряют больше памяти, чем это стоит за время/память, которую он сохраняет. Думаю, я бы сказал об этом. – 2010-12-07 13:08:19

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