2016-11-04 4 views
-4

は、私はこのような構造を定義すると言う:これは戻り値の参照の有効な使用ですか?

struct point { 
    int x; 
    int y; 
} 

const point & clone(point& pt) { 
    point * new_pt; 
    * new_pt = pt; // copy info, new is called? 
    return *new_pt; 
} 

私の理解では、暗黙のうちにnewを呼び出して、コピーされた構造のためにヒープ上に必要なストレージを割り当て、そのnew_ptは一時的な変数を指していない、と私は返すことができます*new_pt = ptですそれへの参照は、そうですか?

+7

* "私の理解は' * new_pt = pt'は暗黙的にnewを呼び出し、コピーされた構造のヒープ上に必要な記憶域を割り当てます。*あなたはその考えをどこで得ましたか?試行錯誤してC++を習得しようとするのをやめてください。代わりに良い本から系統的に学ぶ。 –

+0

*「私の理解は* new_pt = ptは暗黙のうちに新しいものを呼び出し、コピーされた構造のヒープ上に必要な記憶域を割り当てます」*好奇心の理由から、あなたの理解はなぜですか?それは間違いなく起こりません。この古典をチェックしてください:http://cslibrary.stanford.edu/104/ C++バージョンを見てください。 –

+0

私はなぜ質問と例の敵対的な態度を理解していない。この例は、「C++ Primer Plus」第6版2011ページ400から取られました。変数の正確な命名は、自己完結型に変更されました。ブックからの逐語的な言葉は "クローン()への呼び出しは' new'への呼び出しを隠蔽します... "...したがって、' unique_ptr'を使うより良いアプローチです。しかし、それは問題のポイントではありません。私はそこに「新」と言われました。したがって、疑問です。 – python152

答えて

2

new_ptは何も指していないので、*new_pt = ptがクラッシュする可能性があります(実際には未定義の動作です)。

メモリを動的に割り当てる場合は、ある時点でnewを実行する必要があります。しかし誰がdeleteに行くのだろう?

関数はオブジェクトまたはshared_ptrを返す必要があります(しかし、とにかく新しいものを作成する必要があります)。

0

私の理解は、* new_pt = PT暗黙新たを呼び出して、コピーされた構造

point * new_pt; 

new_ptのヒープに必要なストレージを割り当てるundertermined値を有しています。

* new_pt = pt; 

あなたはnew_ptを逆参照されているが、それはあなたが(クラッシュになります非常に高い結果)未定義の動作をトリガを意味し、定義されていません。

コードでnew_ptの値をpt(効果的にコピーしています)に割り当てようとしています。

関連する問題