• 締切済み

"関数の中でnewで初期化したポインタの参照先を返してはならない"とは?

「関数の中でnewで初期化したポインタの参照先を返してはならない」 というアドバイスがEffective C++の第二版に書いてあるらしいのですが、 本がもう手に入らないためどういう内容なのか興味があります。 「関数の中でnewで初期化したポインタの参照先を返してはならない」 とは具体的にどういうことをいっているのでしょうか? できれば簡単なサンプルコードと共に説明してくださると助かります。

みんなの回答

  • ddnp009
  • ベストアンサー率25% (15/58)
回答No.3

2つの禁じ手を指していて、 簡単なほう、1つ目は A& func() {  A a;  return a; // aはこの直後に死亡する } 2つ目はjactaさんのサンプルどおり A& func() {  A* a = new A;  return *a; // aをdeleteすることができない(ことに繋がる)からダメ }

すると、全ての回答が全文表示されます。
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

> 本がもう手に入らないためどういう内容なのか興味があります。 第3版では、21項がこの内容に相当します。 > 「関数の中でnewで初期化したポインタの参照先を返してはならない」 > とは具体的にどういうことをいっているのでしょうか? こういうことです。 A& func() {  A* a = new A;  return *a; // ダメ! }

すると、全ての回答が全文表示されます。
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

原文だと Never return a reference to a local object or a dereferenced pointer initialized by new within the function のようですね。 dereferenced pointer initialized by new within the functionを "関数の中でnewで初期化したポインタの参照先を返してはならない" と訳すのはちと厳しい気もしますが(間違いというほどではないと思いますが)、 ↓のサンプル見ればわかりませんか? Item ecpp_31 http://spi.cern.ch/qa/codewizard/4_2_manuals/ec_31.htm Reason for rule: Returning a reference to a local object or a dereferenced pointer initialized by new within the function may cause a memory leak.

すると、全ての回答が全文表示されます。

関連するQ&A