gpt4 book ai didi

c++ - 在循环中创建唯一的对象指针

转载 作者:搜寻专家 更新时间:2023-10-31 00:41:33 24 4
gpt4 key购买 nike

我需要在循环中创建对象指针,但我正在努力创建唯一指针。这是我的代码:

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 应该在循环完成时进行 - 否则(删除在同一个循环内) - 操作系统可能会再次为您提供相同的地址。
(或者更确切地说,当你完成分配在这个地址中的对象时)

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

关于c++ - 在循环中创建唯一的对象指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13050360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com