C++ vector的delete与clear的区别 - 析构函数

来源:互联网 发布:高清网络解码器 编辑:程序博客网 时间:2024/05/17 21:39

C++ vector的delete与clear的区别 - 析构函数

分享
标签: C++  vector  delete clear  析构函数  分类: CPlusPlus 2011-04-14 22:52

1.clear()   不调用析构函数 

2.delete   *it   调用析构函数 
可用以下程序测试出来:

#include <iostream>

#include <string>

#include <fstream>

#include <vector>

using namespace std;

 

ofstream txtout("test.txt");

 

class A

{

public:

  A()

  txtout<< "A constructor! "<<endl;

  }

  virtual~A();

};

 

A::~A()

txtout<< "A destructor! "<<endl;

}

 

const int test_size= 10;

int main()

{

  vector< A* >the_vector,the_vector_copy;

      A*pa;

 

      for( inti=0;i <test_size;i++ )

      pa = newA();

         the_vector.push_back(pa);

         the_vector_copy.push_back(pa);

      }

 

      txtout<<endl;

      txtout<< "beforedelete... "<<endl;

      pa= the_vector[0];

      deletepa;

      txtout<< "afterdelete... "<<endl;

      txtout<<endl;

 

      txtout<<endl;

      txtout<< "beforeclear... "<<endl;

      the_vector.clear();

      txtout<< "after clear..."<<endl;

      txtout<<endl;

 

      txtout<<endl;

      txtout<< "before alldeleting... "<<endl;

      forinti=1;i <test_size;i++ )

         deletethe_vector_copy[i];

  }

  txtout<< "after all deleting... "<<endl;

  txtout<<endl;

}


 code::blocks 运行结果:

A constructor! 
A constructor! 
A constructor! 
A constructor! 
A constructor! 
A constructor! 
A constructor! 
A constructor! 
A constructor! 
A constructor! 

before delete... 
A destructor! 
after delete... 


before clear... 
after clear... 


before all deleting... 
A destructor! 
A destructor! 
A destructor! 
A destructor! 
A destructor! 
A destructor! 
A destructor! 
A destructor! 
A destructor! 
after all deleting...