我需要在一个循环中创建对象指针,但是我在创建唯一指针方面很费力。这是我的代码:
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
应该在循环完成时出现-否则(删除在同一循环中)-操作系统可以再次为您提供相同的地址。
(或者确切地说,当您完成在此地址中分配的对象时)
代码中发生的事情是您使用了自动分配的内存。该内存通常在堆栈上分配-且在每次迭代中-相同的内存将重新用于变量-因此它为您提供了相同的地址。