gpt4 book ai didi

C++ 自引用类

转载 作者:太空狗 更新时间:2023-10-29 23:26:42 25 4
gpt4 key购买 nike

我不得不承认我的 C++ 有点生疏了。在一个项目中,我尝试创建一个类 vector 并使用它们。有一个问题,因为我想用一个唯一的指向它的指针来识别 vector 的每个条目以便快速访问,但它不起作用。这是我的问题的一个最小示例:

#include <iostream>
#include <vector>

class Foo{
public:
Foo() { ptr = this; }
~Foo() {}
Foo * ptr;
};

int main()
{
std::vector<Foo> vec;
for(unsigned int i = 0; i < 2; ++i)
vec.push_back(Foo());
for(unsigned int i = 0; i < vec.size(); ++i)
std::cout << "Object Self-Pointer: " << std::hex << reinterpret_cast<unsigned int>(vec[i].ptr) << std::endl;
}

实际输出:

Object Self-Pointer: bfbebc18
Object Self-Pointer: bfbebc18

预期输出:

Object Self-Pointer: bfbebc18
Object Self-Pointer: bfbebc1c

(一些指向实际对象的指针)。

希望您能帮我解决这个问题,在此先感谢您。

最佳答案

当你这样做时:

vec.push_back(Foo());

创建了一个新的临时Foo对象,但是每次都是在同一个地址创建的(因为是在栈上创建的,栈指针是一样的)。所以 this 指针,因此每个实例的 ptr 成员都是相同的。

当你将每个实例添加到 vector 中时,默认的复制构造函数被调用,所以ptr成员被复制,因此 vector 中的所有实例都具有相同的值(value)。

关于C++ 自引用类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9624909/

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