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