【发布时间】:2011-10-22 15:17:11
【问题描述】:
当我初始化我的类的一个对象时,默认构造函数和复制构造函数都会被调用。
class A
{
public:
A (string s) { str = string (s); cout << "default" << endl; }
A (int n) { cout << "A (int n)" << endl; }
A (string s, int n) { cout << "A (string s, int n)" << endl; }
A (int n2, string s2) { cout << "A (int n2, string s2)" << endl; }
A (const A& a) { str = a.str; cout << "copy" << endl; }
inline void printA () { cout << str << endl; }
string str;
};
int main (void)
{
A a_1 = A ("con 1");
cout << endl;
A a_2 = "con 2";
cout << endl;
A a_3 = A (4);
A a_4 = A ("a_4", 10);
cout << endl;
A a_5 = A (11, "a_5");
cout << endl;
cin.get();
return 0;
}
结果:
默认 复制 默认 A (int n) A (字符串 s, int n) 复制 A (int n2, 字符串 s2) 复制为什么a_1、a_3 和a_4 同时调用默认构造函数和复制构造函数?
A_3 也有一个参数,但它不需要复制构造函数。
【问题讨论】:
-
为什么要添加默认构造函数?
-
@curiousguy:我想在这里更清楚地描述问题。我可以这样做:
A () { cout << "default" << endl; }并将当前默认构造函数更改为:A (string s) { str = string (s); cout << "A (string s)" << endl; }以获得更好的调试信息。此外,如果您将Foo()设为私有,则此构造函数在类外将变得不可用。然后,explicit关键字做了我不记得的事情:) AFAIK 就是这样。 -
@MartinBerger 请编辑“为什么 A_1 调用默认值”。
-
@Martin:你不需要默认构造函数,我只是说输出“默认”的构造函数不是默认构造函数,因此调用默认构造函数的说法是只是错了。
标签: c++ constructor copy-constructor