C++根据条件创建对象

  • 本文关键字:创建对象 条件 C++ c++
  • 更新时间 :
  • 英文 :


>我根据命令行选项创建一个对象。

在C++

Capture *cc = NULL;
if ( argv[2] == "capture" )
  cc = new Capture(<some args>);

现在要在代码的不同部分使用它,我是否应该创建一个包含虚拟函数的 CaptureStub,以便永远不会访问空指针。还是有更简单的方法?

谢谢

我应该创建一个包含虚拟函数的捕获存根

你是说空对象模式?是的,那很好。

还是有更简单的方法?

我不确定是否有更简单的方法(Null 对象模式是一种非常好的方法),但一种非常惯用的方法是检查 NULL

 if (cc != NULL)
 {
    // do something with cc
 }
首先

,您的if条件永远不会为真,因为==将字符串文本capture的地址与第二个命令行参数进行比较。 您需要将其更改为类似 strcmp("capture", argv[2] == 0)(string("capture") == string(argv[2])) .

其次,我认为我们需要仔细考虑你想要什么的语义。 如果未指定"捕获"选项,所需的行为是什么? 吵闹吗? 如果不是,那么,正如@Doug T.提到的,Null Object模式是一个不错的选择,而不是在代码中散布与null的比较。

Capture cc = NULL;

呃,那不是指针。如果它编译,那是因为 Capture 类有一个隐式构造函数,该构造函数接受 int 或指针,或者具有 operator=

要更正此用法

Capture* cc = NULL;

之后,您应该以一种仅在初始化对象时使用的方式构建代码。如果不可能,请在每次检查之前进行检查。

最新更新