1. ホーム
  2. c++

[解決済み] std::vector オブジェクトの「正しい」割り当て解除方法

2022-02-24 18:50:45

質問

最初の解答は

std::vector<int> *vec = new std::vector<int>;
assert(vec != NULL);
// ...
delete vec;

An 代替 があります。

std::vector<int> v;
//...
vec.clear();
vec.swap(std::vector<int>(vec));

2つ目の解決策はちょっとしたトリックで、「正しい方法」とは何でしょうか?

更新してください。

デストラクタがスタックから外れた時点で呼ばれることは承知しています、他の方法が気になりました。

どのように解決するのですか?

ベクターの割り当てを解除する最も簡単で確実な方法は、スタック上で宣言し、単に何もしないことです。

void Foo() {
  std::vector<int> v;
  ...
}

のデストラクタは、C++で保証されています。 v はメソッドの実行時に呼び出されます。 のデストラクタは std::vector は、それが割り当てたすべてのメモリが解放されるようにします。 このため T の型は vector<T> が適切な C++ のデアロケーション・セマンティクスを持っていれば、すべてがうまくいくでしょう。