>我根据命令行选项创建一个对象。
在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;
之后,您应该以一种仅在初始化对象时使用的方式构建代码。如果不可能,请在每次检查之前进行检查。