C ++我需要在默认构造函数中初始化一个stl字段吗?

时间:2014-11-15 19:39:57

标签: c++ map constructor stl default

所以,说我有这样一个类(C ++,而不是C ++ 11):

Class A{
    A();
    std::map<int,int> my_map;
}   

如果我想编写我的构造函数,我应该这样做吗?

A::A(){my_map();}

或者,如果我想要一张空地图,我应该把构造函数留空吗?

1 个答案:

答案 0 :(得分:1)

你好像错误了member-initializer list的构造函数体。成员初始化列表是用于通过调用其构造函数来实际构造数据成员和基类的内容。它以冒号开头,后跟逗号分隔的构造函数调用列表。对于您的示例,要在my_map上调用默认构造函数,您可以使用以下语法:

A::A() : my_map() { }

初始化列表使用其default-constructor构造my_map,然后执行构造函数体。如果您想要以不同方式初始化数据成员,但是如果您的所有构造函数都显式调用所有数据成员的默认构造函数,那么这非常有用,那么它实际上并不是完全不同于编译器生成的默认构造函数。

TL; DR :在这种情况下,您不需要编写自己的构造函数,因为编译器会为您提供一个。