本文主要是介绍Effective C++ 条款5,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
了解C++默认编写并调用哪些函数
本节有两处知识点。
首先
对于一个class
1.如果class中没有任何构造函数,那么编译器为class声明一个default默认构造函数。
2.如果class没有析构函数、copy构造函数、copy assignment运算符则class声明这三个函数。
3.只有当调用析构函数、copy构造函数、copy assignment运算符时,编译器才生成它们,请大家分清楚,声明和生成是两码事。
如下代码:
//定义的class
class Empty{
};
//编译器声明的class
class Empty{
public:Empty(){}Empty(const Empty& rhs){}Empty& operator=(const Empty& rhs){}~Empty(){}
};
其次
当类中存在引用类型的数据或者const类型数据。则编译器拒绝自动生成copy assignment运算符函数。除非你自己定义
如下代码:
//对于这个类,编译器不会自动生成copy assignment
template<typename T>
class NamedObject{
public:NamedObject(const char* name, const T& value);NamedObject(const std::string& name, const T& value);private:std::string& nameValue;const T objectValue;
};
这篇关于Effective C++ 条款5的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!