C ++基于条件创建对象

时间:2011-05-06 14:56:48

标签: c++

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

在C ++中

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

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

由于

3 个答案:

答案 0 :(得分:3)

  

我应该创建一个包含虚函数的CaptureStub

你的意思是Null Object Pattern?是的,没关系。

  

或者有更简单的方法吗?

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

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

答案 1 :(得分:1)

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

其次,我认为我们需要思考你想要的语义。如果未指定“捕获”选项,所需的行为是什么?做noithing?如果没有,那么,正如@Doug T.提到的那样,Null对象模式是一个不错的选择,而不是将代码与null进行比较。

答案 2 :(得分:0)

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

纠正此用法

Capture* cc = NULL;

之后,您应该以只在初始化对象时使用对象的方式构造代码。如果不可能,那么每次检查之前都要检查。