私の知る限り、両方のベクトル宣言について次のようになります。
//TYPE 1
std::vector<cls> vec; //cls is user defined datatype(A class)
ベクトルのメモリはスタックに割り当てられ、ベクトルの内容のメモリはヒープに割り当てられます。
以下の宣言にも当てはまります(間違っている場合は訂正してください):
//TYPE 2
std::vector<cls*> vec; //cls is user defined datatype(A class)
タイプ 1 のベクトルが範囲外になると、そこに格納されているオブジェクトのメモリの割り当てが解除されます。
しかし、次のように要素を挿入すると (適切なオーバーロードされたコンストラクターがあると仮定して)、タイプ 2 で何が起こるか、ベクトルが範囲外になります。
vec.push_back(new cls(5));
clear を明示的に呼び出してみましたが、デストラクタは呼び出されませんでした。メモリの割り当てが自動的に解除され、デストラクタが呼び出されますか。そうでない場合は、それを達成する方法。
また、ベクトルを次のように宣言した場合、ベクトルとコンテンツに割り当てられたメモリはどこにありますか。
std::vector<cls*> *vec = new std::vector<cls*>;