explicit copy constructor的用处
可能是我孤陋寡闻,呵
今天发现explicit copy constructor也有一些用处
写下来,算是自己的感想吧
用处就是禁止client端的函数按值传递
#include <iostream>
using namespace std;
class A {
public:
A( int i ) : i_( i ) {}
void func() const { cout << "hello, A::func\n";}
explicit A( const A & ){}
private:
int i_;
};
void funcByValue( A a )
{
a.func();
}
void funcByRef( const A & a )
{
a.func();
}
int
main()
{
A a( 2 );
funcByValue( a ); // 这句错误
funcByRef( a ); // 这句可以
system( "pause" );
return 0;
}
另外对于这种copy constructor,
声明初始化时也只能 A b( a );而不能用 A b = a;
问题点数:20、回复次数:7Top
1 楼xlsue(小林)回复于 2005-10-27 17:13:30 得分 20
以前好像在哪里有说过,的确可以这样用.Top
2 楼xzgyb(老达摩)回复于 2005-10-27 17:18:42 得分 0
xlsue:
我还真没看过
今天看<<effective c++>>
上面提到explicit copy constructor了
才想到Top
3 楼xlsue(小林)回复于 2005-10-27 17:24:46 得分 0
对了,好像就是<<Effective c++>>上的.你看书太多了,记不太清楚了.是可以这样用的.Top
4 楼xlsue(小林)回复于 2005-10-27 17:25:28 得分 0
打错了,是我看书太多了:)Top
5 楼xzgyb(老达摩)回复于 2005-10-27 17:28:36 得分 0
xlsue(小林饼子):
呵呵,那可能是
我也忘了Top
6 楼xlsue(小林)回复于 2005-10-27 17:30:25 得分 0
haha,快揭帖...->给分...:)Top
7 楼xzgyb(老达摩)回复于 2005-10-28 08:48:59 得分 0
给分leTop




