我有一類的容器(含指針)作爲成員:如何返回一個const std :: vector <Object * const>?
MyClass{
private:
std::vector<MyObject*> _VecMyObjs;
public:
const std::vector<MyObject* const> GetVecMyObj();
}
現在我嘗試實施GetVecMyObj()。以下是我想出了...
const vector<MyObject *const> ACI_CALL MyClass::GetVecMyObjs()
{
const vector<MyObject *const> VecMyObjs;
VecMyObjs.assign(_VecMyObjs.begin(), _VecMyObjs.end());
return VecMyObjs;
}
但當然編譯器警告我,說我使用分配功能的一個const-對象。有一個更好的方法嗎?我的意思是,當然,我不希望VecMyObjs在課堂外改變VecMyObj。如何在沒有編譯器警告的情況下實現該目標?編輯: 好的。謝謝大家。現在是這樣的:
const vector<MyObject *const> ACI_CALL MyClass::GetVecMyObjs()
{
const vector<MyObject *const> VecMyObjs;
VecMyObjs.assign(_VecMyObjs.begin(), _VecMyObjs.end());
return VecMyObjs;
}
但是,我無法繞過分配函數,對吧?例如。如果我想讓「一切」保持不變,那麼鑄造「原創」是行不通的。
你不需要VicMyObjs是GetVecMyObjs函數內部常量......返回時,該資格將被隱式添加。 – 2010-12-15 11:14:42
您確定要使用vector而不使用vector 嗎?爲什麼通過引用返回const不可行? –
Palmik
2010-12-15 11:30:12
關於你的編輯,你希望一切都是恆定的:正如其他人已經指出的,你正在使指針爲const,而不是指向的對象。這些可以改變,從而改變你的內部對象。 – stefaanv 2010-12-15 11:54:25