- 締切済み
ポインタ変数への参照について
現在とあるDLLを作成中なのですが、メソッドの仕様で悩んでいます。 DLL内部で不正アクセス等を極力発生させないことを考えているのですが、ポインタを引数にとるメソッドの場合、引数に不正なアドレスを渡されるとメソッド内部で引数を参照した段階で不正アクセスで落ちてしまいます。この対応は、引数を参照とすることで解決しようと思っているのですが、ダブルポインタを引数にとるメソッドで同じ考え方をすると、メソッドの仕様が理解しづらいものになってしまいます。 下記がサンプルコードです。 class Test { public: Test() { m_test = 1; } int m_test; }; void GetTest1(Test** test) //もともとの仕様はこんな形 { *test = new Test(); } void GetTest2(Test*& test) //参照渡しにすると「*&」と書かなくてはならない { test = new Test(); } int main() { Test* get1; Test* get2; GetTest1(&get1); GetTest2(get2); delete get1; delete get2; return 0; } このように、「ポインタの参照」にすれば不正なポインタを渡される心配はなくなりますが。 「*&」など(私は)見たことも無いような記述になってしまいます。 このような書き方は一般的に考えて正しいのでしょうか? (特にDLLが提供するメソッドとして)
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
規格を調べれば分かりますがロカール関連のテンプレートクラス codecvt のメンバーでいくつか「ポインタの参照」を引数にとるものがあります. もっと驚異的な物としては, basic_istream のメンバーとして「ポインタ値を読み込む」operator >>(void *&) があります. いずれもメンバー関数ですが, 「C++ でしか使わない」という前提を置いていいならメンバーじゃない関数にしても問題ないです.
お礼
ご回答、ありがとうございます。 C++の標準ライブラリでありましたっけ? 知識不足で申し訳ないのですが、どのような関数が教えていただけませんでしょうか。