只要对象是默认对象,就会自动使用默认构造函数 值已初始化。所以使用默认构造函数很方便。
但如果某个类没有有意义的默认值,
例如,一个人应该有一个名字,一个空字符串不是一个有意义的名字:
#include <string>
class Person {
public:
Person() : name("") {} // Does it have to be supplied?
explicit Person(const std::string &n) : name(n) {}
private:
std::string name;
};
答案 0 :(得分:2)
但是如果一个类没有有意义的默认值,那么该类是否仍然必须提供默认的构造函数?
一般来说,没有。如果不应该将对象初始化为无效状态,那么构造函数必须提供创建有效对象的方法,这意味着它们必须接受参数。
您可能需要提供默认构造函数:
std::map
,则值类型需要默认构造函数如果没有提供默认构造函数会有什么不良影响吗?
如果你的意思是&#34;没有程序定义的无参数构造函数&#34;,那么编译器会为你创建一个,这可能是不受欢迎的,所以你必须使用= delete
修饰符来确保编译器做不要创建默认构造函数。
对于您的对象没有默认构造函数或无参数构造函数的情况,您可能会发现STL中的某些容器可能无法与您的类一起使用。