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

本文通过示例代码详细对比了C++中vector容器使用delete与clear方法时的行为差异,特别是对析构函数调用的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 ( int i=0; i <test_size; i++ )

      pa = new A();

         the_vector.push_back(pa);

         the_vector_copy.push_back(pa);

      }

 

      txtout <<endl;

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

      pa = the_vector[0];

      delete pa;

      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;

      for int i=1; i <test_size; i++ )

         delete the_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...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值