取消引用 shared_ptr

Unreference shared_ptr

我知道两种方法:

// Declared somewhere but not on stack
shared_ptr<X> xptr = make_shared<X>();

xptr = nullptr;  //#1
xptr.reset();  //#2

对我来说 #1 看起来更好,但从 C++

的角度来看更好

两者都不是客观上更好的。几乎在每种情况下,差异纯粹是美学上的。

我能想到的唯一例外是编写一个适用于智能指针和裸指针的通用函数模板。只有 ptr = nullptr 是裸指针的有效语法。

仅当指针不为空时,assignment 和 reset 成员函数在行为上有所不同。