| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 895 人关注过本帖
标题:[讨论]构造函数内调用构造函数的合法性?
取消只看楼主 加入收藏
yuyunliuhen
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1435
专家分:0
注 册:2005-12-12
结帖率:100%
收藏
 问题点数:0 回复次数:2 
[讨论]构造函数内调用构造函数的合法性?
看下面一段代码:
class CLS{
public:
CLS( int i ) : m_i(i) {}
CLS()
{
CLS(0);
}
int m_i;
};
CLS obj;
cout << obj.m_i << endl; //输出结果是什么?

这是一个面试题,测试输出是不定的,有人说在构造函数内调用构造函数是非法的,但实际上编译器是并没有报错或警告。

今天在看《Effective c++》Third Edition 的时候,在 Item14:Think carefully about copy behavior in resource-managing classes.有这样的代码:

void lock(){Mutex *pm}
void unlock (){ Mutex *pm }
class Lock
{
public:
explicit Lock(Mutex *pm):MutexPtr(pm){}
~Lock (){ unlock(mutexPtr);}
private:
Mutex *mutexPtr;
};

《Effective c++》也算是本比较权威的书。大师们应该不会范低级的错误吧。那么,构造函数内调用构造函数是不是非法的呢?为什么?大家讨论下。

[此贴子已经被作者于2007-9-11 15:19:35编辑过]

搜索更多相关主题的帖子: 构造函数 CLS 合法性 Mutex obj 
2007-09-11 13:18
yuyunliuhen
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1435
专家分:0
注 册:2005-12-12
收藏
得分:0 

怎么这么冷呢,顶上去!



#include <iostream>
using namespace std;

class CTest
{
public:
CTest();
CTest(int a);
void print() const
{
cout<<i<<" "<<j<<endl;
}
private:
int i,j;
};

CTest::CTest()
{
i=2;
}

CTest::CTest(int a)
{
j=a;
CTest(); //此语句新建了一个临时对象,随即析构。并没有
} //改变i的值。


int main()
{
CTest demo(8);
demo.print();
system("pause");
return 0;
}
在网上查了点资料,这个看起来有点道理,大家测试看看。i的值并没有改变。。也就是说i并没有被初始化或赋值。


大家继续讨论哈。


Go confidently in the  directions of your dreams,live the life you have imagined!Just do it!
It is no use learning without thinking!
2007-09-11 22:16
yuyunliuhen
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:1435
专家分:0
注 册:2005-12-12
收藏
得分:0 
恩,我想也是,书上有类似的代码,而且编译器测试也没问题,可能有它特别的用处吧

Go confidently in the  directions of your dreams,live the life you have imagined!Just do it!
It is no use learning without thinking!
2007-09-11 23:18
快速回复:[讨论]构造函数内调用构造函数的合法性?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025581 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved