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

最近C++書いています。 (早くGaucheに戻りたい) 10年ぐらい前にMacのCarbonでC++書いていましたが、今となっては昔の話です。 そもそもCarbonフレームワークではメモリ管理はリファレンスカウンター方式だったので一回理解してしまえばリークしないコードが比較的簡単にかけました。 さて、ピュアなC++ではnewとdeleteしてメモリ管理したり、shared_ptrとかあったりして混乱します。 早速混乱したのが、参照渡しとポインター渡しです。 書いていることが間違っている可能性あります。 (指摘していただけると幸いです) ## ポインター渡し クラスはポインターなので、クラスを渡す時にはポインターで渡すのが普通だと思います。 ```cpp `gutter:true; void PointerSample(Hoge* hoge) { // hogeのメソッドを呼ぶ時には矢印 hoge->SameMethod(); } ``` ポインター渡しの時には、NULLが来ることがあるかもしれません。 参照元がない可能性もあります。 nullチェックできます。 ## 参照渡し 色々調べると参照渡しが良いという意見が多いようです。 ```cpp `gutter:true; 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 件のコメント :

コメントを投稿