我喜欢 C++11 中的新指针类型,但有时我仍然需要原始指针。然而,让我对 C++ 中的“原始”类型越来越难过的是,它们习惯于在未给出明确值时初始化为未定义。当我更频繁地使用 std::shared_ptr<> 等时,需要将原始指针初始化为 null 感觉越来越脆弱和不必要。我在谈论:
class foo
{
...
std::shared_ptr< bar > pb; // Initially null in whatever constructor.
std::unique_ptr< dar > pd; // Likewise.
std::weak_ptr< gar > pg; // And again.
lar* pr; // Uh-oh! Who knows what this is? Better remember to initialize...
};
foo::foo( int j )
: pr( nullptr )
{...}
foo::foo( const string& s )
: pr( nullptr )
{...}
... etc.: many tedious and error-prone constructor definitions follow.
因此,我想要的是“具有空初始化的原始指针”。就像是:
class foo
{
...
std::shared_ptr< bar > pb; // Initially null in whatever constructor.
std::unique_ptr< dar > pd; // Likewise.
std::weak_ptr< gar > pg; // And again.
raw_ptr< lar > pr; // Once more with feeling.
};
foo::foo( int j )
{...} // No explicit pointer initialization necessary.
foo::foo( const string& s )
{...}
...
更准确地说,我想要的是一种简单、廉价的类型,除了它的默认构造函数将其初始化为 nullptr 之外,它在各方面的行为都与原始指针完全一样。
我的问题:(1)标准库中是否已经存在这样的东西?(2) 如果不是,那么完成这种类型的实现的最优雅/最小的方法是什么?
PS 我对 Boost 或任何其他库不感兴趣,除非它可能是单个文件中的仅标头库。小和简单是本质。