かなり単純な質問がありますが、頭を悩ませることはできません。
私はこのコードを持っていると考えてください:
#include <iostream>
#include <vector>
using namespace std;
class B
{
public:
B(const int& val) {this->val = val;}
int val;
};
class A
{
public:
A() {}
void Set(B& ptb)
{
ptBs.push_back(&ptb);
}
void Set(const int& val)
{
ptBs.push_back(new B(val));
}
std::vector<B*> ptBs;
};
int main()
{
A* ptA = new A();
ptA->Set(B(10));
ptA->Set(38);
for (int i=0; i<ptA->ptBs.size(); i++)
cout << ptA->ptBs[i]->val << endl;
delete ptA;
system("pause");
return 0;
}
出力結果は次のとおりです。
10
38
void Set(const int& val)
しかし、このメソッドによって作成された配列要素で delete を呼び出さないと、メモリ リークが発生していると思います。
std::vector のどの要素がヒープ上に作成されたので、次のように ~A() デストラクタでメモリを解放できますか?
~A()
{
for (int i=0; i<ptBs.size(); i++)
delete ptBs[i];
}
また、一時的な新しい操作呼び出しで作成されたベクター要素を削除する必要がありますか?
おそらく、ここでは非常に単純なものは見当たりませんが、私のアプリケーションにはこの機能が本当に必要です。
PS。10 と 38 は単純な例です。Set
関数は、異なる引数で何千回も呼び出すことができます。