C++自引用类

Lis*_*ing 2 c++ stl vector

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

#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; 
}
Run Code Online (Sandbox Code Playgroud)

实际产量:

Object Self-Pointer: bfbebc18
Object Self-Pointer: bfbebc18
Run Code Online (Sandbox Code Playgroud)

预期产量:

Object Self-Pointer: bfbebc18
Object Self-Pointer: bfbebc1c
Run Code Online (Sandbox Code Playgroud)

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

我希望你能帮我解决这个问题,提前谢谢你.

Asa*_*saf 10

当你这样做:

vec.push_back(Foo());
Run Code Online (Sandbox Code Playgroud)

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

将每个实例添加到向量时,将调用默认的复制构造函数,因此ptr会复制该成员,因此向量中的所有实例都具有相同的值.