我应该检查“std :: string.c_str”是否为NULL?

时间:2017-07-12 10:50:19

标签: c++ ios objective-c++

我在Xcode中编写代码C ++代码。在一个实例中,我确保所有字段都有效。

SomeClass *myclass = new SomeClass();
std::string myString;

if ( (myClass) && (myString.c_str)) {
return true;
} else {
return false;
}

我应该检查testString.c_str吗?这有道理吗?

1 个答案:

答案 0 :(得分:1)

new()运算符的默认行为是返回新对象,或者在内存分配失败时抛出异常。因此,您不需要检查myClass是否为NULL,除非您设置标志以更改行为或为您的类实现自己的new()运算符。

此外,myClass周围的额外括号不是必需的。表达您想要检查的内容的更好方法是

if ((myClass != nullptr) && 

然后,您正在测试c_str()类中方法std::string的地址是否为NULL。我猜你不想做你想做的事 首先,您需要编写myString.c_str()。然后,此方法永远不会返回NULL指针,它可以返回的是一个空C字符串。但是使用std::string::empty()可以更好地测试,因此您的检查将如下所示:

if (myString.empty()) {
return false;
} else {
return true;
}

当然可以缩短为

   return !myString.empty();

最后:如果你在函数/方法中有这个代码:谁删除你的新SomeClass对象?