我有一个关于新数组的简单问题;在这段代码中,我试图将新数组成员的地址推送到指针向量中,但是如果我使用下面的注释代码,我无法通过向量迭代器调用此指针的函数:
#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...
答案 0 :(得分:1)
你不应该这样做:
delete *counted_it ;
如果内存是由Counted *c = new Counted[buff_size] ;
分配的,则释放内存的正确方法应为delete[] c;
,您不能单独删除该元素。