
最近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 件のコメント :
コメントを投稿