1.释放单个指针

关于Vector中存放指针的问题,在进行清空的时候比较安全的一种做法是:
    std::vector<ClassName *> ClassNameVec;
    ...push_back(new ClassName());
    std::vector<ClassName *>::iterator ClassNameIt = ClassNameVec.begin();
    for(;ClassNameIt != ClassNameVec.end();++ClassNameIt)
    {    
        if(*ClassNameIt != NULL)
        {
          delete *ClassNameIt;
          *ClassNameIt = NULL;
        }  
    }
    ClassNameVec.clear();

2.释放数组

vector <int*>    vecInt; 
for   (int   i   =0      ;i    <   10000;   i++) 

int*   pint   =new   int[100]; 
vecInt.push_back(pint); 

vector <int*> ::iterator   it_INT; 
for   (it_INT   =   vecInt.begin()   ;   it_INT   !=   vecInt.end();   it_INT++) 

    delete[]   (*it_INT); 

vecInt.clear();

3 先释放内容,在释放内存

,注意存储的是外部指针的一个拷贝,删除时首先是删除这个拷贝指针的内容,也就是删除外部指针所指向内存的内容,然后再删除容

器中的变量(用来存储指针的内存).

#include "stdafx.h"
#include <vector>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
vector<char*> vecPtr;
char* ptr = new char[16];
ptr[0] = 0;
memcpy(ptr, "abc", 16);
vecPtr.push_back(ptr);
vector<char*>::iterator it = vecPtr.begin();
for (; it != vecPtr.end(); )
{
   delete[] *it;
   it = vecPtr.erase(it);
}
return 0;
}

4.注意临时变量带来的风险

在vector中存放东西要注意以下几点
存放不同对象没有任何问题,顶多就是耗费内存

但是如果存放指针时 请注意以下几点

vector<type1*> ConType;

ConType LtType;

void Add()
{
  Type1 temp;
  LtType.pushback(&temp); // 注意这个地方有问题。temp的实际地址空间在栈中, 函数结束后, temp就将被释放,这个时候

vector中的内存指向就是非法。
  可以如下这么改
  Type1* temp = new Type1(); // 这个时候temp在堆上
  LtType.pushback(temp); // 这样就没问题了

c++ vector 释放内存的更多相关文章

  1. vector释放内存之swap方法

    相信大家看到swap这个词都一定不会感到陌生,就是简单的元素交换.但swap在C++ STL中散发着无穷的魅力.下面将详细的说明泛型算法swap和容器中的swap成员函数的使用! 1. 泛型算法swa ...

  2. vector 释放内存 swap

    相 信大家看到swap这个词都一定不会感到陌生,甚至会有这样想法:这不就是简单的元素交换嘛.的确,swap交换函数是仅次于Hello word这样老得不能老的词,然而,泛型算法东风,这个小小的玩意儿却 ...

  3. vector容器删除某些元素且释放内存

    1,size和capacity size: 指目前容器中实际有多少元素,对应的resize(size_type)会在容器尾添加或删除一些元素,来调整容器中实际的内容,使容器达到指定的大小. capac ...

  4. 关于vector的内存释放问题

    以前一直想当然的以为vector 的clear()函数会保证释放vector的内存,今天网上一查资料发现完全不是我想象的那样子. 比如有如下代码: tempObject obj1; tempObjec ...

  5. vector的内存释放

    转自:http://www.cnblogs.com/summerRQ/articles/2407974.html vector : C++ STL中的顺序容器,封装数组 1. vector容器的内存自 ...

  6. [C++]STL容器Vector的内存释放

    直接抛出两句话,说明到底应该如何释放Vector占用的内存. “vector的clear不影响capacity,你应该swap一个空的vector.” <Effective STL>中的“ ...

  7. c++ vector的内存释放

    c++中vector的一个特点是: 内存空间只会增长,不会减小.即为了支持快速的随机访问,vector容器的元素以连续方式存放,每一个元素都挨着前一个元素存储.设想,如果每次vector添加一个新元素 ...

  8. std::vector的内存释放

    先上一段代码 using namespace std; class A{ public: ~A(){ cout << "deconstruct"; }; }; #inc ...

  9. opencv里vector的内存的申请和释放的问题

    改成: ); CvSeq * m_contour=; cvFindContours( &IPlImage(img), m_storage, &m_contour, ,)); //释放内 ...

随机推荐

  1. ios开发解决遍历删除数组对象报错

    //            删除对应数据 //            for (OrderModel *order in self.OrderList) { // //                ...

  2. hive报错 Another instance of Derby may have already booted the database

    刚装好hive后,启动之后showtables;等正常,退出之后再进入,就发现会报错 Caused by: ERROR XSDB6: Another instance ofDerbymay have ...

  3. opencv 人脸识别 (一)训练样本的处理

    本文实现基于eigenface的人脸检测与识别.给定一个图像数据库,进行以下步骤: 进行人脸检测,将检测出的人脸存入数据库2 对数据库2进行人脸建模 在测试集上进行recognition   本篇实现 ...

  4. jquery ajax json简单的分页,模拟数据,没有封装,只显示原理

    简单的分页,模拟数据,没有封装,显示原理,大家有兴趣可以自己封装,这里只是个原理过程,真正的分页也差不多是这个原理,只是请求数据不太一样,html部分: <!TOCTYPE HTML> & ...

  5. BZOJ 2351 Matrix(哈希)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2351 题意:给出一个n*m的01矩阵.再给出10个A*B的小01矩阵.判断这些小的矩阵是 ...

  6. AIX 内存使用情况

    cat > WHAT_EVER_YOU_WANT.sh#!/usr/bin/ksh#memory calculatorum=`svmon -G | head -2|tail -1| awk {' ...

  7. android 事件处理机制之requestDisallowInterceptTouchEvent

    当手指触摸到屏幕时,系统就会调用相应View的onTouchEvent,并传入一系列的action.当有多个层级的View时,在父层级允许的情 况下,这个action会一直向下传递直到遇到最深层的Vi ...

  8. 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,循环控制及其优化

    上两篇博客 8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,数据结构“栈”实现 研究了递归方法实现回溯,解决N皇后问题,下面我们来 ...

  9. gitflow workflow

    https://www.atlassian.com/git/tutorials/comparing-workflows/forking-workflow Dream big, work smart,  ...

  10. 瞎折腾之 VS2013 Cordova项目的创建与配置

    扯淡 什么是Cordova ? 网上查询的说明: Cordova是贡献给Apache后的开源项目,是从PhoneGap中抽出的核心代码,是驱动PhoneGap的核心引擎.你可以把他想象成类似于Webk ...