gpt4 book ai didi

c++ - 在 C++ 中自初始化为 nullptr 的普通原始指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:25:52 25 4
gpt4 key购买 nike

我喜欢 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) 如果不是,那么完成此类实现的最优雅/最小的方法是什么?

附言我对 Boost 或任何其他库不感兴趣,除非它可能是单个文件中的仅 header 库。小巧和简单是本质。

最佳答案

C++11 允许在类中初始化数据成员。

class foo
{
// ...
lar *pr = nullptr;
};

除非您在构造函数中分配另一个值,否则它将始终将 pr 初始化为 nullptr

关于c++ - 在 C++ 中自初始化为 nullptr 的普通原始指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17534210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com