BS: テストしました。以下の質問は VS2010 固有のものです。Mingw でのテストでは、ベクトル メモリがリークしています。printf("%d\n", testV->size()); '10' が表示されます。これは、リークであることを示しています。
以下のようなコードで:
class Test{
public:
std::vector<int> *num;
int *n;
};
Test *t = new Test();
t->num = new std::vector<int>;
t->num->assign(10,10);
t->n = new int[20];
t->n[0] = 12345;
int *testN = t->n;
std::vector<int> *testV;
testV = t->num;
delete t;
//I can print n's memory
printf("%d\n", testN[0]); //get 12345, so memory leaked here.
//I can't print num's memory; its size is 0. in release version, it's negative number.
printf("%d\n", testV->size());
t を削除した後、メモリ num が指すメモリがクリアされていることがわかります。私の VS10 環境では、そのメモリが「ee fe ee fe....」にクリーンアップされていることがわかりました。しかし、n のメモリは同じままです。
私の意見では、すべてのメモリはキーワード new に由来し、delete で解放する必要があります。ここでは、num (ベクトル) は「削除」されず、自動的にクリアされます。
ベクトルポインターが他のポインターとどう違うのか知りたいですか?