如何将“new”数组成员的地址传递给vector

时间:2014-11-06 01:43:55

标签: c++ vector iterator

我有一个关于新数组的简单问题;在这段代码中,我试图将新数组成员的地址推送到指针向量中,但是如果我使用下面的注释代码,我无法通过向量迭代器调用此指针的函数:

#include <iostream>
#include <vector>
#include <fstream>

std::ofstream trace("test.out") ;

class Counted {
  int id ;
  static int count ;
public:
  Counted():id(count++) {trace << "Counted Object Constructed, ID = "
                   <<id << std::endl;}
  ~Counted(){trace<< "Counted Object destroyed..." << std::endl;}
  int get_id()const {return id;}

};


int Counted::count = 0;

int main() {
  std::vector<Counted*> Counted_vector;
  std::vector<Counted*>:: iterator counted_it ;
  const int buff_size = 5 ;
  //Counted *c = new Counted[buff_size] ;

  /*for(int i = 0; i < buff_size; i++){
    Counted_vector.push_back(&c[i]) ;    // not useful
    }*/

  for(int i = 0; i < buff_size; i++){
    Counted_vector.push_back(new Counted) ;
    }

  counted_it = Counted_vector.begin();
  while (counted_it <= Counted_vector.end()){
    if(*counted_it){
    trace << "*(counted_it)->get_id() = " << (*counted_it)->get_id()
          <<std::endl ;
    delete *counted_it ;}
    else break;
       counted_it++;
  }

}

输出:

Counted Object Constructed, ID = 0
Counted Object Constructed, ID = 1
Counted Object Constructed, ID = 2
Counted Object Constructed, ID = 3
Counted Object Constructed, ID = 4
*(counted_it)->get_id() = 0
Counted Object destroyed...
*(counted_it)->get_id() = 1
Counted Object destroyed...
*(counted_it)->get_id() = 2
Counted Object destroyed...
*(counted_it)->get_id() = 3
Counted Object destroyed...
*(counted_it)->get_id() = 4
Counted Object destroyed...

如果使用了注释代码:

Counted Object Constructed, ID = 0
Counted Object Constructed, ID = 1
Counted Object Constructed, ID = 2
Counted Object Constructed, ID = 3
Counted Object Constructed, ID = 4
*(counted_it)->get_id() = 0
Counted Object destroyed...

1 个答案:

答案 0 :(得分:1)

你不应该这样做:

delete *counted_it ;

如果内存是由Counted *c = new Counted[buff_size] ;分配的,则释放内存的正确方法应为delete[] c;,您不能单独删除该元素。