温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C++默认构造函数有什么作用

发布时间:2021-11-29 14:01:15 来源:亿速云 阅读:325 作者:iii 栏目:大数据

本篇内容介绍了“C++默认构造函数有什么作用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

C.44:默认构造函数最好简单而且不会抛出异常   

Reason(原因)

默认构造函数可以将内容设置到默认状态而不需要可能引起失败的操作,简化了错误处理和针对移动操作的推测。   

Example, problematic(问题示例)
template<typename T>
// elem points to space-elem element allocated using new
class Vector0 {
public:
   Vector0() :Vector0{0} {}
   Vector0(int n) :elem{new T[n]}, space{elem + n}, last{elem} {}
   // ...
private:
   own<T*> elem;
   T* space;
   T* last;
};

这段代码整洁且普通,但是如果过在涉及到内存分配的错误之后生成一个空的Vector0对象时,可能会失败。同时,让默认的Vector表现为{new T[0], 0, 0}有些浪费。例如Vector0<int>v[100]需要100次内存分配。   

100次内存分配似乎有些问题。译者的理解是只要一次分配100个整数的空间就好。

另外new T[0]有点奇怪。   

Example(示例) 
template<typename T>
// elem is nullptr or elem points to space-elem element allocated using new
class Vector1 {
public:
   // sets the representation to {nullptr, nullptr, nullptr}; doesn't throw
   Vector1() noexcept {}
   Vector1(int n) :elem{new T[n]}, space{elem + n}, last{elem} {}
   // ...
private:
   own<T*> elem = nullptr;
   T* space = nullptr;
   T* last = nullptr;
};

使用{nullptr, nullptr, nullptr}让Vector1{}的代价更小,但是特殊的情况,(由于产生了没有数据的情况,译者注)需要运行时检查。在检测到错误之后将Vector1设为空的处理是小事情。

 Enforcement(实施建议)

提示抛出异常的构造函数。      

“C++默认构造函数有什么作用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++
AI