好久都没有提问了。现在提个问题,还望各位真正的C++大侠指教。

winmain 2002-04-16 04:08:14
请问C++中如何阻止对象的构造(除了抛出异常外)。
比如:1.在构造过程中,当我们发现某个条件不成立时,我不其希望构造成功(因为它就象一些无参构造函数一样无意义)。2.但是这样的话在产生这个对象的函数中后面的代码该如何处理(因为没构造成功)?
...全文
51 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lastday1 2002-05-10
  • 打赏
  • 举报
回复
真是的,是打错!!!今天晕了
Lastday1 2002-05-10
  • 打赏
  • 举报
回复
最后一句话打算,不好意思
Lastday1 2002-05-10
  • 打赏
  • 举报
回复
不要想其他的了,c++为什么要有异常,不就为了很好的解决这种问题吗,为什么还去想其他的办法。编程就是该用的地方就要用啊,没必要想其他的更麻烦的办法
1+1=2就可以了,为什么还要说1+1=2-1呢???
ajoo 2002-05-10
  • 打赏
  • 举报
回复
It's always a good idea to hide constructors.
mjm_d 2002-05-09
  • 打赏
  • 举报
回复
class A
{
A();
......
//
}
A::A
{
if error
delete this;
return;
}
LionEagle 2002-05-09
  • 打赏
  • 举报
回复
不知道是否符合你的要求:
class A
{
private:
A(...){...}
public:
bool Init(...){...} // 做构造的工作
static A* NewInstance(...)
{
A* p = new A(...);

if( !p->Init(...) )
{
delete p;
return NULL;
}

return p;
}

}
winmain 2002-05-09
  • 打赏
  • 举报
回复
我的英文能力很差,也没时间看。希望高手能系统的回答我的问题。
anrxhzh 2002-04-16
  • 打赏
  • 举报
回复
这里有权威的论述:http://www.research.att.com/~bs/3rd_safe.pdf

To sum up: the two-phase construction approach leads to more complicated invariants and typically to less elegant, more error-prone, and harder-to-maintain code. Consequently, the languagesupported ‘‘constructor approach’’ should be preferred to the ‘‘init()-function approach’’ whenever feasible. That is, resources should be acquired in constructors whenever delayed resource acquisition isn’t mandated by the inherent semantics of a class.
winmain 2002-04-16
  • 打赏
  • 举报
回复
如果使用异常,有没有什么好的方法可以代替烦人的try catch?
J_John 2002-04-16
  • 打赏
  • 举报
回复
用异常较好。
嘿嘿,或者在报告错误之后直接用exit(0)退出。
因为你产生对像所在函数后面的代码已经不需要执行啦!
winmain 2002-04-16
  • 打赏
  • 举报
回复
To afsfop() :直接用if-else不行吗?
如何使用望指教,请举例说明。另外if-else是compile time吗?有点不解?能说的明白点吗?
winmain 2002-04-16
  • 打赏
  • 举报
回复
To nwlz47(秋水沉舟):
"要么用异常处理",你认为该如何高效的使用,不用没次都写try catch.

"要么在构造这个对象前自己判断是否能满足条件,再选择是否构造",但条件有和对象本身有密切关系,不能在外部断定。
winmain 2002-04-16
  • 打赏
  • 举报
回复
To prototype(原型) :compile time or run time?
可以都说说看。
wlz47 2002-04-16
  • 打赏
  • 举报
回复
要么用异常处理,
要么在构造这个对象前自己判断是否能满足条件,再选择是否构造
prototype 2002-04-16
  • 打赏
  • 举报
回复
阻止对象的构造: compile time or run time?

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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