读书人

继续问复制控制解决方案

发布时间: 2012-03-05 11:54:02 作者: rapoo

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

#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);
是这样吗?



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

读书人网 >C++

热点推荐