我碰到這個評論是在另一個SO後,關於一個std容器放置引用:用的std ::容器,儲存引用GNU C++ 98
它在C++語言的一個缺陷。您無法獲取 引用的地址,因爲嘗試這樣做會導致引用該對象的地址爲 ,因此您永遠無法獲得指向 的引用。 std :: vector使用指向其元素的指針,因此需要能夠指向被存儲的 值。您必須改爲使用指針 。
的職位:
Why can't I make a vector of references?
假設這是正確的,有人可以解釋爲什麼我下面的代碼工作?我並不是想暗示這個人是錯的,我只是想確保我明白什麼是可能的,哪些不是。
我的代碼:
#include <iostream>
#include <vector>
#include "stdio.h"
struct TestStruct
{
int x;
int y;
};
class TestClass {
public:
TestClass(int x, int y);
int getX();
int getY();
private:
int mX;
int mY;
};
TestClass::TestClass(int x, int y)
{
mX = x;
mY = y;
}
int TestClass::getX()
{
return mX;
}
int TestClass::getY()
{
return mY;
}
int main()
{
// test struct
std::vector<TestStruct> structVec;
TestStruct testStruct;
testStruct.x = 10;
testStruct.y = 100;
structVec.push_back(testStruct);
testStruct.x = 2;
testStruct.y = 200;
structVec.push_back(testStruct);
testStruct.x = 3;
testStruct.y = 300;
structVec.push_back(testStruct);
for (int i = 0; i < structVec.size(); i++)
{
printf("testStruct [%d] - [x: %d, y: %d] \n", i, structVec[i].x, structVec[i].y);
}
// test object
std::vector<TestClass> objVec;
objVec.push_back(*new TestClass(10, 100));
objVec.push_back(*new TestClass(20, 200));
objVec.push_back(*new TestClass(30, 300));
for (int i = 0; i < objVec.size(); i++)
{
printf("objVec [%d] - [x: %d, y: %d] \n", i, objVec[i].getX(), objVec[i].getY());
}
}
輸出:
testStruct [0] - [x: 10, y: 100]
testStruct [1] - [x: 2, y: 200]
testStruct [2] - [x: 3, y: 300]
objVec [0] - [x: 10, y: 100]
objVec [1] - [x: 20, y: 200]
objVec [2] - [x: 30, y: 300]
你的代碼中沒有引用的向量你有內存泄漏otoh – krzaq
由於引用部分地說「std :: vector使用指向其元素的指針」,這是無稽之談,我不會注意其他任何東西, –