首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

很有意思的现象,关于复制构造函数解决方案

2012-03-05 
很有意思的现象,关于复制构造函数C/C++ code// test.cpp : 定义控制台应用程序的入口点。//#include stdaf

很有意思的现象,关于复制构造函数

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

应该是使用的编译器在做怪吧.

热点排行