我不得不承认我的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会复制该成员,因此向量中的所有实例都具有相同的值.
| 归档时间: |
|
| 查看次数: |
3407 次 |
| 最近记录: |