2012-03-28 8 views
0

リファレンスをポインタに正しく変換するにはどうすればよいですか?リファレンスをポインタに正しく変換するにはどうすればよいですか?

以下のコードでは、「一時アドレスを取得する」という警告が表示されます。 myclassmyClassListが同じ寿命を持っているので

MyClass myclass; 

vector<MyClass*> myClassList; 

myClassList.push_back(&myclass); 

MethodThatsNeedsVectorOFMyClassPointers(myClassList); 
+1

うーん、いいえ、彼のコードは警告を出さない。 –

+0

参照を使用するのではなく、ポインタを格納する必要があるのはなぜですか? – Matt

+1

'myClass'が破棄された後にベクトルを使用しようとしない限り、このコードは私には大丈夫です。 – Naveen

答えて

3

あなたのコードは、今のように見える方法で、あなたは警告を受けるべきではありません。しかし、myClassListmyclassをoutlives場合、あなたは動的MyClassを割り当てる必要があります。

vector<MyClass*> myClassList; 
{ 
    MyClass* myclass = new MyClass; 
    myClassList.push_back(myclass); 
} 

次はあなたが実際に持っているものに近い場合:

vector<MyClass*> myClassList; 
{ 
    MyClass myclass; 
    myClassList.push_back(&myclass); 
} 

その後、myclassを閉じ}、およびmyClassListで破壊されます解放されたメモリへのポインタを含みます。

また、MyClass多型ですか?あなたは本当にベクトルにポインタを格納する必要がありますか?

+2

コードの中のベクトルは、 'myclass'の長さだけ存続します。 –

+0

@ R.MartinhoFernandes彼は警告を受けているので、私は彼の実際のコードではないと推測しています - 'MethodThatsNeedsVectorOFMyClassPointers'を参照してください。 –

+0

あなたは「今のところOPが持っている方法」という警告が正しいと思いますか?この警告を説明するファイン。しかし、実際には、ベクトルやその他の代替手段ではなく、動的割り当てが実際に必要であると推測しています。 –

関連する問題