ให้บอกว่าฉันต้องการสร้างเวกเตอร์ของวัตถุและเวกเตอร์ของตัวชี้อีกตัวไปยังวัตถุเหล่านั้น (ฉันไม่สามารถใช้หน่วยความจำแบบไดนามิกได้) วิธีที่ฉันจะทำคือในตัวอย่างต่อไปนี้
#include <iostream>
#include <vector>
using namespace std;
class Foo {
public:
int bar;
Foo(int x) : bar(x) {
}
};
int main () {
vector<Foo> foos;
vector<Foo*> pFoos;
for (int i = 0; i < 10; i++) {
Foo foo(i);
foos.push_back(foo);
pFoos.push_back(&foos.back());
}
for (int i = 0; i < 10; i++) {
cout << foos[i].bar << endl;
cout << pFoos[i]->bar << endl;
}
}
ฉันคิดว่าสิ่งนี้น่าจะได้ผลเพราะ foos
เก็บสำเนาของออบเจ็กต์ จากนั้นฉันก็เก็บการอ้างอิงไปยังสำเนานั้น (เพราะว่า foo
ต้นฉบับจะไม่ได้กำหนดไว้ ดังนั้นฉันจึงไม่ควรเก็บข้อมูลอ้างอิงถึงสิ่งนั้น) แต่นี่คือสิ่งที่ฉันได้รับ:
0
36741184
1
0
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
เลขตัวแรกถึงตัวเลขจาก pFoos
ผิด นอกจากนี้จำนวนมากยังเปลี่ยนแปลงทุกครั้ง ฉันไม่เห็นสิ่งใดที่จะทำให้เกิดพฤติกรรมที่ไม่ได้กำหนดนี้ ใครช่วยบอกฉันว่าฉันทำอะไรผิด?
foo
ไม่คงที่ แต่เป็นที่เก็บข้อมูลในเครื่อง... - person rodrigo   schedule 13.11.2012vectored
ไม่ใช่สำเนาต้นฉบับ ปัญหาคือคำตอบของ mythagel: ตัวชี้ใช้ไม่ได้ - person rodrigo   schedule 13.11.2012