加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在C中自我初始化为nullptr的简单原始指针

发布时间:2020-12-16 06:46:02 所属栏目:百科 来源:网络整理
导读:我喜欢C 11中的新指针类型,但有时候我还需要一个原始指针.然而,让我对C中的“原始”类型越来越感到悲伤的一点是,当没有明确的值时,他们习惯初始化为未定义.因为我使用std :: shared_ptr更常见的是,将原始指针初始化为null的需要感觉越来越脆弱和不必要.我在
我喜欢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或任何其他库不感兴趣,除非它可能是单个文件中的头文件库.小巧和简约是至关重要的.

解决方法

C 11允许数据成员的类初始化.

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

除非你在构造函数中指定另一个值,否则总是将pr初始化为nullptr.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读