я сталкиваюсь вопрос с shared_ptr
, кажется, что для инициализации пустого shared_ptr
, есть два распространенных способа, как цитата из std::shared_ptr: reset() vs. assignmentНазначить недавно построенный shared_ptr
T {
T(X x, Y y);
~T();
}
shared_ptr<T> p;
p.reset(new T(x,y));
p = make_shared<T>(t1) //t1 is a T type object
Однако, почему это не будет работать?
p = shared_ptr<T>(new T(x,y));
Это просто плохая практика или это просто неправильно? Благодаря!
Там есть ответ о том, что make_shared является более эффективным, чем новый с точки зрения строительства Is make_shared really more efficient than new?:
std::shared_ptr<Object> p1 = std::make_shared<Object>("foo"); //copy??
std::shared_ptr<Object> p2(new Object("foo")); //conversion?
Благодарим за ваш ответ, не возражаете ли вы продолжить разработку своего ответа? Я думаю, shared_ptr p; даст нулевой указатель, в то время как все три следующие строки назначат объект, который будет управляться указателем, в то время как я пытаюсь выяснить разницу между последней и предыдущей? Извините, если мои концепции полностью ошибочны. –
user3113633