我有一个快速的问题,关于从类中的公共成员函数返回一个指向矢量或指针映射的指针的含义。C++从一个公共成员函数返回指针的向量/映射
这是我的代码:
这里是在B类
vector<A*>* ClassB::getfunction(){
returns m_test;
}
m_test是指针类型的B类的指针的载体的私有数据成员的成员函数。这个对象将在堆上初始化,所以我需要在类的析构函数中删除它(包括向量中的所有元素)。
我会使用如下所示的函数。
B* ex_B = new B();
vector<A*>* ex_ptr_vecA = new vector<A*>;
ex_ptr_vecA = ex_B->getfunction();
我的问题:
因为我有一个的内存都在堆上分配两个对象将我需要删除他们两个?
该命令是否重要,以下是否正确?
B* ex_B = new B();
vector<A*>* ex_ptr_vecA = new vector<A*>;
ex_ptr_vecA = ex_B->getfunction();
//do something with ex_ptr_vecA
//Then I want to delete the allocate memory to the heap
//delete class B first
delete ex_B;
//and then the vector
//need to loop over vector elements and delete one at a time
for(int i =0; i < ex_ptr_vecA; i++){
delete ex_ptr_vecA->at(i);
}
delete ex_ptr_vecA;
这是正确的,或者我会试图删除悬挂指针,因为类B的析构函数已经取消了堆内存的分配?
对不起Typo。在函数中应该返回一个指针向量的指针。这仍然会给我同样的结果吗? – MWright
@特许:是的,会的。如果m_test属于B(阅读:是B的成员),则只有B应删除它。你可以使用scoped_ptr和引用来清除它。 – thiton
是否意味着我只需要删除ex_B?你能告诉我一个解决上述代码的方法吗? – MWright