2017-07-12 9 views
-6

私はXcodeにコードC++コードを書いています。インスタンスでは、すべてのフィールドが有効であることを確認しています。"std :: string.c_str"がNULLかどうかチェックする必要がありますか?

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

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

testString.c_strを確認する必要がありますか?それは理にかなっていますか?

+1

意味がありません。オブジェクトのさまざまな意味的状態をテストするための特定のAPIとして 'std :: string'を使用します。 – StoryTeller

+5

最初のチェックは意味をなさないが、 'new'演算子は決してヌルポインタを返しません。 –

+3

また、 'myString.c_str'は有効な式ではありません。 – StoryTeller

答えて

1

new()演算子のデフォルトの動作は、新しいオブジェクトを返すか、メモリ割り当てに失敗した場合に例外をスローすることです。したがって、振る舞いを変更するフラグを設定したり、クラスの独自のnew()演算子を実装しない限り、myClassがNULLかどうかを確認する必要はありません。

また、myClassの余分な括弧は必要ありません。 std::stringクラスのメソッドc_str()のアドレスがNULLでない場合は、より良い方法は、あなたが次に

if ((myClass != nullptr) && 

だろうチェックしたいものを表現するために、あなたは現在テストしています。あなたがしたいとは思わない、と思います。
まず、myString.c_str()と記述する必要があります。次に、このメソッドはNULLポインタを返しません。返すことができるのは空のC文字列です。しかし、これは、より良いstd::string::empty()でテストされているので、あなたのチェックは次のようになります。もちろん最後

return !myString.empty(); 

に短縮することができ

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

:あなたは関数/メソッドでこのコードをお持ちの場合:誰があなたの新しいSomeClassオブジェクトを削除しますか?

+0

SomeClassオブジェクトは、検証メソッドに引数として渡されます。私もこれを世話する必要がありますか?私はXcodeに取り組んでいます。 –

+0

さて、C++タグを削除する必要があります...私はobjective-cを知らないのですが、C++ではnew()で作成したオブジェクトを自分自身で削除する必要があります。 – Rene

関連する問題