Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;基于条件创建对象_C++ - Fatal编程技术网

C++ C++;基于条件创建对象

C++ C++;基于条件创建对象,c++,C++,我基于命令行选项创建一个对象 在C中++ Capture *cc = NULL; if ( argv[2] == "capture" ) cc = new Capture(<some args>); Capture*cc=NULL; 如果(argv[2]=“捕获”) cc=新捕获(); 现在,为了在代码的不同部分使用它,我是否应该创建一个包含伪函数的CaptureSub,以便永远不会访问空指针。还是有更简单的方法 谢谢 呃,那不是一个指针。如果它编译,那是因为Capture类

我基于命令行选项创建一个对象

在C中++

Capture *cc = NULL;
if ( argv[2] == "capture" )
  cc = new Capture(<some args>);
Capture*cc=NULL;
如果(argv[2]=“捕获”)
cc=新捕获();
现在,为了在代码的不同部分使用它,我是否应该创建一个包含伪函数的CaptureSub,以便永远不会访问空指针。还是有更简单的方法

谢谢

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

要更正此用法

Capture* cc = NULL;
在此之后,您应该以一种只有在初始化对象时才使用该对象的方式来构造代码。如果不可能,那么每次检查之前都要检查

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

要更正此用法

Capture* cc = NULL;
在此之后,您应该以一种只有在初始化对象时才使用该对象的方式来构造代码。如果不可能,那么每次检查之前都要检查

我应该创建包含伪函数的CaptureSub吗

你是说那个?是的,那很好

还是有更简单的方法

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

 if (cc != NULL)
 {
    // do something with cc
 }
我应该创建包含伪函数的CaptureSub吗

你是说那个?是的,那很好

还是有更简单的方法

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

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

首先,您的
if
条件永远不会为真,因为
=
将字符串literal
捕获的地址与第二个命令行参数进行比较。您需要将其更改为类似于strcmp(“捕获”,argv[2]==0)
(字符串(“捕获”)==string(argv[2])


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

首先,您的
if
条件永远不会为真,因为
=
将字符串literal
捕获的地址与第二个命令行参数进行比较。您需要将其更改为类似于strcmp(“捕获”,argv[2]==0)
(字符串(“捕获”)==string(argv[2])


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

-1。发布至少应该编译的代码,这样我们就不会浪费时间修改语法。我假设这里有一个输入错误,你的意思是Capture*cc-1。发布至少应该编译的代码,这样我们就不会浪费时间修改语法。我假设这里有一个输入错误,你的意思是Capture*cc