在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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |