あらゆる応用が利く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するのをわすれてしまったりということが起きるかもしれないということも考えてしまい、どちらをがメジャーなのかよくわかりません。
皆様ならどういった方法をとりますか?
また別な方法がありましたが教えてくださるとありがたいです。
No.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);
}
とします。
とても詳細にしかも幾つか例を示して下さりありがとうございます。
自分は、C++を始めて一週間なのでstd::??といったC++の構文を
理解していないため例を理解できなかったのですが、C++に更に
こんなにもたくさんの応用があったとは驚きました。
いろいろとC++の構文を調べてスマートな方法を選別し使用したいと思います。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 関数ポインタの高速化のメリット 7 2023/05/05 20:15
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# C言語 ポインタ 配列 2 2022/06/02 17:29
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# ポインタの型変換、どうやるんでしたっけ? 2 2022/03/28 11:00
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- C言語・C++・C# C pointer? or... 2 2022/03/29 00:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セグメントエラー
-
戻り値で構造体を返すことは可...
-
init関数の意味
-
C言語でのconstを返す関数
-
fopne で失敗する原因
-
C言語の関数と配列に関する質問
-
コンストラクタでnewを失敗した...
-
Run-Time Check Failure #3とい...
-
ハンドル、アドレス、ポインタ...
-
C言語のポインタに直接アドレス...
-
LPSTR型の初期化について
-
VBはCを混乱させる?
-
ハンドルはポインタか
-
構造体の中の構造体
-
パスからファイル名を抽出
-
C言語でポインタを使ってピタ...
-
単方向リスト
-
AESのC言語による実装
-
ExcelVBAでのkernel32(64bit)
-
nullポインタを逆参照とは?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語のポインタに直接アドレス...
-
C言語の関数と配列に関する質問
-
戻り値で構造体を返すことは可...
-
fopne で失敗する原因
-
init関数の意味
-
Run-Time Check Failure #3とい...
-
LPSTR型の初期化について
-
セグメントエラー
-
アプリを32bitから64bit移行
-
コンストラクタでnewを失敗した...
-
ExcelVBAでのkernel32(64bit)
-
Cで作成したDLL関数をVBから呼...
-
ハンドルはポインタか
-
DLL<->VB間での受け渡し(文字...
-
C言語でのconstを返す関数
-
ポインタについて
-
参照型で受け取った引数をポイ...
-
TCHAR文字列内の検索について
-
デバイスハンドルとは?
-
基本アルゴリズムの『返す』の...
おすすめ情報