アプリ版:「スタンプのみでお礼する」機能のリリースについて

あらゆる応用が利くC++ではあるのですが、それによってひとつのやり方にも複数の方法が出てくるのはよくあること。そこで、new型のポインタにおいて戻り値として返せばいいのか、パラメータとして使えばいいのか悩んでおります。

[1]
wchar_t *XXX(int size){
  wchar_t *ret = new wchar_t[size]
  //ポインタに対するいろいろな制御
  return ret;
}
↑このように、関数内部でnew型ポインタを宣言し、そのポインタのアドレスを外部のポインタに渡す。



[2]
static wchar_t ret = new wchar_t;
--------
void XXX(wchar_t *ret, int size){
  //ポインタに対するいろいろな制御
}
↑関数を呼ぶ手前ですでにnew型ポインタを宣言しておく




[1]のほうが、宣言をする手間を省くことができるような気がしますが、new型ポインタがいらなくなったときにdeleteするのをわすれてしまったりということが起きるかもしれないということも考えてしまい、どちらをがメジャーなのかよくわかりません。


皆様ならどういった方法をとりますか?
また別な方法がありましたが教えてくださるとありがたいです。

A 回答 (1件)

[1]と[2]のどちらか一方を選ぶなら、迷わず[2]です。


[1]は、関数が返したポインタの素性が分かりにくいので、間違いのもとになります。

普通はこのような場合、生のポインタを使うのではなく、

std::wstring XXX(){
  std::wstring ret;
  //文字列に対するいろいろな制御
  return ret;
}

とするか、関数内部で副作用を伴うのであれば、

std::auto_ptr<std::wstring> XXX(){
  std::auto_ptr<std::wstring> ret(new std::wstring);
  //文字列に対するいろいろな制御
  return ret;
}

または、

void XXX(std::wstring* ret){
  std::wstring temp;
  //文字列に対するいろいろな制御
  ret->swap(temp);
}

とします。
    • good
    • 0
この回答へのお礼

とても詳細にしかも幾つか例を示して下さりありがとうございます。
自分は、C++を始めて一週間なのでstd::??といったC++の構文を
理解していないため例を理解できなかったのですが、C++に更に
こんなにもたくさんの応用があったとは驚きました。

いろいろとC++の構文を調べてスマートな方法を選別し使用したいと思います。ありがとうございました。

お礼日時:2008/03/14 14:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!