[C++] 参照渡しとかポインター渡しとか混乱して来た

最近C++書いています。
(早くGaucheに戻りたい)
10年ぐらい前にMacのCarbonでC++書いていましたが、今となっては昔の話です。
そもそもCarbonフレームワークではメモリ管理はリファレンスカウンター方式だったので一回理解してしまえばリークしないコードが比較的簡単にかけました。

さて、ピュアなC++ではnewとdeleteしてメモリ管理したり、shared_ptrとかあったりして混乱します。
早速混乱したのが、参照渡しとポインター渡しです。
書いていることが間違っている可能性あります。
(指摘していただけると幸いです)

ポインター渡し

クラスはポインターなので、クラスを渡す時にはポインターで渡すのが普通だと思います。

1
2
3
4
void PointerSample(Hoge* hoge) {
    // hogeのメソッドを呼ぶ時には矢印
    hoge->SameMethod();
}

ポインター渡しの時には、NULLが来ることがあるかもしれません。
参照元がない可能性もあります。
nullチェックできます。

参照渡し

色々調べると参照渡しが良いという意見が多いようです。

1
2
3
4
5
6
7
8
9
10
void PointerSample(Hoge& hoge) {
    // hogeのメソッドを呼ぶ時にはドット
    hoge.SameMethod();
}
 
// const string&
void PointerSample2(const std::string& hoge) {
    // ...
    // if ( hoge == nullptr ) ... これはエラーになる
}

参照渡しの場合はドットでメソッドにアクセスできます。
あと、nullptrを入れる事ができないので、nullptrかどうかのチェックはできません。
(ロジックエラーになります)

値を変更しないのであれば、constとセットで使うのが良さそうです。

そのほか

C++でcharの文字列を使う利点はあるのでしょうか。
可能ならstd::stringを使ったほうが良い気がします。

0 件のコメント :

コメントを投稿