vector中寄存指针的释放

vector中存放指针的释放
程序代码如下,对此有几个疑问想请大家指导一下:
1. vector<t_pppSatObs*> obsVector;由于vector中存放的是指针,是不是必须自己释放?
2. 自己释放应该写在哪里? return failure之前?还是if循环的括号之外?
3. 如果是const vector<t_pppParam*>& params     = _parlist->params();,是否需要释放?
4. 如果我有很多地方都用到vector<t_pppSatObs*>,有没有简单的方法可以释放?
请高手指导一下,谢谢啦!

  for (unsigned iSys = 0; iSys < OPT->systems().size(); iSys++) {
    char system = OPT->systems()[iSys];
vector<t_pppSatObs*> obsVector;
for (unsigned jj = 0; jj < allObs.size(); jj++) {
if (allObs[jj]->prn().system() == system) {
obsVector.push_back(allObs[jj]);
}
}
    if ( processSystem(OPT->LCs(system), obsVector) != success ) {
      return failure;
    }
  }

------解决思路----------------------
new或者mallo等函数申请内存, 才需要释放. allObs里面的元素是怎么来的?

释放的时机, 就是不需要的时候释放. 如果不好判断这个时机, 最晚可以在程序退出前释放.
------解决思路----------------------
自己的内存自己管理好,用的时候申请,不用的时候就释放啊
------解决思路----------------------
用智能指针好了
------解决思路----------------------
1. 是
2. 什么时候指针指向的对象不许要了,就应该释放了,没有语法上的一定之规
3. 凡是 new 的都需要释放
4. 用 shared_ptr

------解决思路----------------------
new malloc出来的当然需要delete free啊

你可以写一个专门释放内存的函数,大概像下面这样子(没有进行测试,不保证完全正确)


template <class T>
void DeleteVectorPtr(std::vector<T> &vec)
{
    std::vector<T>::iterator it = vec .begin();
    for( ; it != vec.end(); ++it )
    {
        typename::T *tmp = it;
        delete *tmp;
    }

    vec.clear();
}

------解决思路----------------------
如果你的程序是执行一次就退出的那种,你可以在main函数退出或返回前加一句
//此前所有动态分配的对象在退出此程序时由OS自动释放

这样所有的释放操作你都不需要操心了。
缺点是养成了自己有始无终的坏习惯。