それはおそらくポインター101です...しかし、答えを見つけるのは(私にとって)奇妙に難しいです。
次の例では、すべてが自動的に適切に削除されますか、それとも一部を手動で削除する必要がありますか? それも含まれていTest t
ます...
私の答えはイエスです。明示的に使用しない限り、すべてが解放されますnew
が、確かではありません。
ありがとう。
#include <iostream>
#include <vector>
class Obj
{
public:
Obj(int num) : m_num(num) {}
int getNum() { return m_num; }
private:
int m_num;
};
class Test
{
public:
Test(Obj *po) : m_po(po) {}
void print()
{
std::cout << m_po->getNum() << std::endl;
}
private:
Obj *m_po;
};
class Test2
{
public:
Test2() {}
void add(Obj &o)
{ m_vo.push_back(&o); }
void print()
{
for (size_t i=0; i<m_vo.size(); ++i)
std::cout << m_vo[i]->getNum() << std::endl;
}
private:
std::vector<Obj*> m_vo;
};
int main(int argc, char** argv)
{
Obj o1(1);
Obj o2(2);
Test t(&o1);
t.print();
Test2 t2;
t2.add(o1);
t2.add(o2);
t2.print();
//Would there be other uses of those objects t and t2 that could require a manual delete () ?
return(0);
}