C++根据条件创建对象
C++ creating object based on condition
>我根据命令行选项创建一个对象。
在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;
之后,您应该以一种仅在初始化对象时使用的方式构建代码。如果不可能,请在每次检查之前进行检查。
相关文章:
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何创建对象函数指针C++映射?
- C++创建对象数组
- 在 C++ 的 Switch Case 中创建对象后对对象调用方法
- 如何获取在 main() 函数中构造的类的创建对象?
- 基于文件中的条目创建对象
- 错误:创建对象后无法分配区域
- C++ 通过输入创建对象
- 堆还是堆栈用于创建对象?
- 使用 C++ 创建对象数组
- 使用unique_ptr创建对象
- C++递归地在类构造函数中创建对象
- 通过向构造函数其他对象引用页面来创建对象
- ReactiveX (rx) - 在对象上应用可观察对象,而不是在可观察对象中创建对象
- 如何在OSX上正确创建C++对象文件(.o)
- 编译器是否会创建vtable,而不考虑在c++中创建对象
- 在条件c++语句中创建对象
- c++基于条件创建对象或结构
- 将std::mutex设为static会为互斥对象本身创建竞争条件
- C++根据条件创建对象