很有意思的现象,关于复制构造函数
- C/C++ code
// test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"using namespace std;class A{public: A(int i) { value = i; cout << "Ordinary now value = " << value << endl; } A(const A & other) { if(this == &other) { return; } value = other.value + 1;//复制时加一,这样看出是生成哪个对象调用的 cout << "Copy fun now value =" << value << endl; } ~A() { cout << "destroy value =" << value << endl; } int getValue() { return value; }private: int value;};int _tmain(int argc, _TCHAR* argv[]){ for(int i = 0;i < 1;i++) { A a(A(A(A(A(5)))));//这一句很猛的,试过了,括号里有4个A()那么一定调用2次,6个的话会调用3次 //就是A()的个数除以2次 cout << a.getValue() << endl; } cin.get(); return 0;}
但是如果改成A a(*new A(*new A(47)));这样就什么问题也没有了,完全是和想的一样,是几次就是几次
为什么A a(A(A(A(4))));这样会少调用几次呢?像这样3个A()只会调用一次,4个就调用2次,真的不知为什么
这是问题是江湖浪子大哥在一个贴子中发现的,做了几次实验总结下来大体就是这样了
大家讨论下哈
[解决办法]
在Borland c++ Builder 6中,没问题的啊.
Ordinary now value = 5
Copy fun now value =6
Copy fun now value =7
Copy fun now value =8
Copy fun now value =9
destroy value =8
destroy value =7
destroy value =6
destroy value =5
9
destroy value =9
应该是使用的编译器在做怪吧.