0

C++ での割り当てについて質問があります。私はこのコードを持っています:

vector<unsigned char> &v = *new vector<unsigned char>();

問題は、オブジェクトを逆参照して参照に直接割り当てることは一般的に良い考えですか?

私の意見では、これでオブジェクトが使いやすくなりました。

v.push_back('a');
v[0];

それ以外の

v->push_back('a');
(*v)[0];

やっと、できる

delete &v;

私のヒープを解放する

(同じ)素敵な答えがたくさんあるという理由だけで:スタック変数を使用できることはわかっていますが、私の場合はヒープに必要です!しかし、ヒープまたはスタック変数を使用するという問題は別の問題です。

そのため、この例はシンプルに保ち、変数を割り当てるべきかどうかは特に尋ねませんでした。

4

4 に答える 4

5

オブジェクトを逆参照して参照に直接割り当てることは一般的に良い考えですか?

いいえ、まったくありません。

オブジェクトは現在のスコープの間だけ持続する必要があるため、動的割り当てが必要ない場合は、代わりに自動変数を作成します。

vector<unsigned char> v;

動的オブジェクトが必要な場合は、それを偽装することで、削除が必要であることを忘れてしまいます。最善の方法は、スマート ポインターを使用することです。そのため、削除することを覚えておく必要はまったくありません。それができない場合は、ポインタを使用してください。

于 2013-02-01T13:59:43.447 に答える
2

それは純粋にスタイルの問題です。私が働いた場所ではこの規則を使用していないので、組織内の新しい人々のルートを変更する可能性がありますが、これ有効な規則です。

ポインターを使用する場合と参照を使用する場合のより大きな定義の一部にする必要があります。(そして、これには多くのバリエーションがあります。私は、異なる企業で少なくとも 3 つの異なる規則を使用しました。)

于 2013-02-01T14:34:56.193 に答える
0

Joachim Pileborg がコメントで述べている理由から、ヒープ オブジェクトを主に参照変数に格納することはお勧めできません。最終的にはオブジェクトを削除する必要がありますが、これはポインター変数を使用して行うのが最適です (参照では、実際のオブジェクトが別の場所に存在するかどうか常に疑問に思うでしょう)。

于 2013-02-01T13:59:14.487 に答える
0

あなたはただ行うことができます:

...
{
    vector<unsigned char> v; // this allocates the vector in the stack
    v.push_back('a');
    v[0];
} 
...

私が見る限り、ベクトルをヒープに割り当てる必要はありません。

ヒープとスタック メモリについて読む必要があります。

于 2013-02-01T14:03:31.580 に答える