0

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 (ベクトル) は「削除」されず、自動的にクリアされます。

ベクトルポインターが他のポインターとどう違うのか知りたいですか?

4

3 に答える 3