zoukankan      html  css  js  c++  java
  • c++ vector 释放内存

    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); // 这样就没问题了

  • 相关阅读:
    VB程序逆向反汇编常见的函数(修改版)
    [反汇编练习] 160个CrackMe之009
    [反汇编练习] 160个CrackMe之008
    [反汇编练习] 160个CrackMe之007
    [反汇编练习] 160个CrackMe之006
    Delphi反汇编内部字符串处理函数/过程不完全列表
    [反汇编练习] 160个CrackMe之005
    [反汇编练习] 160个CrackMe之004
    新建Django配置
    mysql 常用命令大全
  • 原文地址:https://www.cnblogs.com/6yuets2/p/3139156.html
Copyright © 2011-2022 走看看