我根据命令行选项创建了一个对象。
在C ++中
Capture *cc = NULL;
if ( argv[2] == "capture" )
cc = new Capture(<some args>);
现在要在代码的不同部分使用它,我应该创建一个包含虚函数的CaptureStub,以便永远不会访问空指针。或者有更简单的方法吗?
由于
答案 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;
之后,您应该以只在初始化对象时使用对象的方式构造代码。如果不可能,那么每次检查之前都要检查。