我需要在一个循环中创建对象指针,但是我在创建唯一指针方面很费力。这是我的代码:

class DatClass{
  public:

  int m;

  DatClass(int i):m(i){}
};

class OtherClass{
  public:
  DatClass* dc;
};

void Test(std::vector<OtherClass> v){
  std::vector<OtherClass>::iterator it;
  int i = 1;
  for(it = v.begin(); it != v.end(); it++){
    DatClass dc = DatClass(i);
    std::cout << &dc << std::endl;
    it->dc = &dc;
    i++;
  }
}

int main(){
  std::vector<OtherClass> v;
  v.push_back(OtherClass());
  v.push_back(OtherClass());
  v.push_back(OtherClass());
  Test(v);
}

这没有给我唯一的指示。输出为:
0xbf94d72c
0xbf94d72c
0xbf94d72c

我是否需要使用new才能获得唯一的指针?如果是这样,我将相应的删除放在哪里?
谢谢!

最佳答案

是的,您应该使用new获得唯一的地址。delete应该在循环完成时出现-否则(删除在同一循环中)-操作系统可以再次为您提供相同的地址。
(或者确切地说,当您完成在此地址中分配的对象时)

代码中发生的事情是您使用了自动分配的内存。该内存通常在堆栈上分配-且在每次迭代中-相同的内存将重新用于变量-因此它为您提供了相同的地址。

07-24 09:46
查看更多