私が持っていて、 2人で、両方とも初期化されているVectorA
と仮定します(つまり、)VectorB
std::vector<SameType>
VectorA.size() > 0
VectorB.size() > 0
私が行った場合:
VectorA = VectorB;
以前に割り当てられたメモリVectorA
は自動的に解放されますか?
含まれているすべてのオブジェクトのデストラクタが呼び出され、ベクトルがメモリを所有しなくなったという意味で解放されます。1
しかし実際には、それはアロケータに返されるだけであり、実際にOSに返される場合とされない場合があります。
使用されているアロケータにバグがない限り、メモリリークが発生していません。それが懸念事項である場合は、
一般的に、必ずしも。一方のベクトルをもう一方に割り当てる場合、事後条件は、操作の最後に両方の配列に同等のオブジェクトが含まれることです。
capacity
宛先ベクトルのが十分である場合、要素のセットに対して代入演算子min( v1.size(), v2.size() )
を呼び出し、宛先ベクトルがより多くの要素を保持している場合は残りの要素を破棄するか、追加の要素をコピー構築することで、操作を実行できます。最後に。この場合、メモリの解放または割り当ては行われません。
宛先ベクトルに十分な容量がない場合は、十分な容量の新しいバッファーを作成し、ソースベクトルから新しいバッファー内の要素をコピー構築します。次に、古いバッファと新しいバッファを交換し、すべての古いオブジェクトを破棄して、古いバッファを解放します。この場合、古いオブジェクトは破棄され、古いメモリが解放されますが、これは1つのケースにすぎません。