あなたが正しい、x[0] = ca
は明らかにあなたが望むものではありませんコピー割り当てを実行します。
あなたは、ポインタの例では近いですが、あなたの代わりにアドレスca
の取得する必要があります:あなたはそれが消え適切にないようca
の寿命を管理するのは非常に慎重でなければならない、しかし
CArray *x[16];
x[0] = &ca;
スコープの時期尚早。
スマートポインタを使用して調べることができます。
は編集:「他の回答
上のあなたのコメントを考えると何の言及はそれのためにもはや存在しなくなるまでの配列が存在することになりシステムがないです(私はから来ています?これはガベージコレクタのPython、「
私は前に述べたようにはい、あなたはスマートポインタを使用したい場合がありx
は唯一の所有者になる場合は、std::unique_ptr
で始めることができる:!。
std::unique_ptr<CArray> x[16];
参照されなくなったスコープから外れる16個の一意なポインタの配列を作成します。ここでは、割り当てることができます方法は次のとおりです。
x[0] = std::make_unique<CArray>();
あなたは他のオブジェクトがメモリの寿命に参加したい場合(つまり、複数の人がそれを参照して終了するまで、メモリが割り当て解除されることはありません)、プロセスが非常にありますshared_ptr
を使用して同じ:それらは容易にコピーされているので
std::shared_ptr<CArray> x[16];
x[0] = std::make_shared<CArray>();
共有ポインタがで動作するように簡単ですが、あなたは時間と空間のオーバーヘッドコストの少しを支払います。心に留めておくべき二つのものがあります
x[0] = &ca;
:、あなたが実際に&演算子を使用し、値または参照型から割り当てるには
CArray *x[16];
を使用すべきポインタの配列を作成するには
ハードコピー...ちょうどよくこれをデバッガで実行し、自分自身で見ることができます。 –
Ok @barakmanos。ハードコピーを避けるには? – Basj
あなたが言ったように:ポインタを作ってください。 –