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

继续问复制控制解决方案

2012-03-05 
继续问复制控制一个非常简单的程序如下:#includeiostreamusingnamespacestdclassFoo{public:Foo(inti){

继续问复制控制
一个非常简单的程序如下:

#include   <iostream>

using   namespace   std;

class   Foo   {
public:
        Foo(int   i)   {   cout   < <   "using   int.   done. "   < <   endl;   }
        ~Foo()   {   cout   < <   "deleting.   done. "   < <   endl;   }
//private:
        Foo(const   Foo   &f)   {   cout   < <   "using   copying.   done. "   < <   endl;   }
};

int   main()   {
    Foo   f   =   100;
    return   0;
}


运行结果为:
using   int.   done.
deleting.   done.

分析Foo   f   =   100这句,应该是先调用Foo(int)来构造临时对象,再调用拷贝构造函数Foo(const   Foo   &f)来构造f,然后再删除临时对象。

但奇怪的是:拷贝构造函数Foo(const   Foo   &f)似乎并没有被调用,析构函数也只被调用了一次;而如果将Foo(const   Foo   &f)设为private,则不能编译。

谁能解释一下?谢谢


[解决办法]
------
将Foo(const Foo &f)设为private,则不能编译。
---------
are u sure???
[解决办法]
Foo f = 100;
等於
Foo f(100);
[解决办法]
分析Foo f = 100这句,应该是先调用Foo(int)来构造临时对象,再调用拷贝构造函数Foo(const Foo &f)来构造f,然后再删除临时对象。
============================================
理论上,是这样的执行
[解决办法]
Foo f = 100;
等於
Foo f(100);
[解决办法]
同意zhousqy(标准C匪徒)(甩拉,甩拉)
[解决办法]
execptional C++ item42
[解决办法]
有个帖子,回家找找看看
[解决办法]
Foo f = 100;
等於
Foo f(100);
是这样吗?



[解决办法]
楼上的是翻译还是自己写的,乱七八糟的.

热点排行