C++类有两个构造函数,相互调用,怎么写?

lcb 2011-10-12 03:17:01
ClassTest::ClassTest() {
m_name="test";
}

ClassTest::ClassTest(char* filename) {
ClassTest();
}

两个构造函数,无参数的那个实现一些基础功能。有参数的那个执行时同样要实现ClassTest()已经实现了的功能,要怎么写?我上面这样写好像会引起一些内存错误。
...全文
586 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
星羽 2011-10-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 vilnies 的回复:]

额外写一个Init()函数不就简单多了。
[/Quote]

这么做可以,不少工程都是这么干的,一个init 一个destroy
星羽 2011-10-13
  • 打赏
  • 举报
回复
ClassTest::ClassTest(char* filename) {
ClassTest(); // 这其实是构造了个临时对象= =
}
ri_aje 2011-10-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 mingliang1212 的回复:]

ClassTest::ClassTest(char* filename) {
ClassTest tmp;
...
this->swap(tmp);//这个swap是自己定义的交换资源用的函数。

}
[/Quote]
这个主意不好,swap 通常要求需要交换的两个对象都是构造完全的,在 this 的构在函数里,this 本身还是一个正在构造的对象。
only_lonely 2011-10-12
  • 打赏
  • 举报
回复
C++11才能像初始化列表一样调用构造函数吧?

为什么不把两个构造函数间的类似代码抽象到一个inline的函数中呢?
zzhen201 2011-10-12
  • 打赏
  • 举报
回复
建立一个私有的初始化函数就可以了吧,
iamnobody 2011-10-12
  • 打赏
  • 举报
回复
ClassTest::ClassTest(char* filename) {
ClassTest tmp;
...
this->swap(tmp);//这个swap是自己定义的交换资源用的函数。

}
vilnies 2011-10-12
  • 打赏
  • 举报
回复
额外写一个Init()函数不就简单多了。
jhzlf 2011-10-12
  • 打赏
  • 举报
回复
构造函数调用构造函数?
你那么写会产生一个临时变量
不建议这么写,公共部分提出来作为一个单独的函数多好
非要写用2楼的。。。
pengzhixi 2011-10-12
  • 打赏
  • 举报
回复
你还打算相互调用?然后陷入死循环?
ri_aje 2011-10-12
  • 打赏
  • 举报
回复
在 C++03 中无法实现,C++11 中增加了一个 delegate constructor 的概念,用起来就像初始化列表一样,你的编译器要是支持 C++11 的这个特性,可以试一下,否则没办法。
pengzhixi 2011-10-12
  • 打赏
  • 举报
回复
你在第2个构造函数里面调用第一个构造函数来构造一个临时对象是干什么呢?
阿白hhh 2011-10-12
  • 打赏
  • 举报
回复
用初始化列表调用
iamnobody 2011-10-12
  • 打赏
  • 举报
回复
应该不会吧:

ClassTest::ClassTest(char* filename) {
this->ClassTest();
}

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧