2016-01-31 5 views
1

У меня есть два определения структуры.Как инициализировать shared_ptr для структуры

struct ST1    
{       
    int iVar1;    
    int iVar2;    
    float iVar3; 
}; 

struct ST2 
{ 
std::shared_ptr<ST1> p_sVar4; 
}; 

ST2 structure2; 

Я пытаюсь инициализировать structure2:

structure2.p_sVar4 = new ST1(); 

, но это не так.

Как инициализировать structure2?

+0

'structure2.p_sVar4 = make_shared (); ' – tkausl

ответ

2

Использование станд :: make_shared:

structure2.p_sVar4 = std::make_shared<ST1>(); 

(это, как правило, предпочтительнее:

structure2.p_sVar4 = std::shared_ptr<ST1>(new ST1) 

)

+0

В чем разница между 'reset' и' make_shared'? – rayallen

+0

std :: make_shared более эффективен, и также полезно уклоняться от необработанных указателей. – user2672165

0

Применение reset

structure2.p_sVar4.reset(new ST1); 
+0

« Сброс »лучше, чем' make_shared'? – rayallen

+0

Я не изучил его глубоко, но из моего опыта работы с C++ я предполагаю, что ни один из них не «лучше». Я привык использовать reset, и для этого требуется уже существующий указатель, который иногда более универсален. – Photon

+0

Спасибо вам все равно – rayallen

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