I have a class :
class A
{
private:
vector<int> x;
public:
const vector<int>& immutable_data() {
return x;
}
vector<int>* mutable_data() {
return &x;
}
}
現在,如果我使用這個類,在我的代碼中,我必須檢查mutable_data()返回的指針是否爲null(假設我知道這個類的結構)。我個人認爲我不需要,因爲我知道存在一個輔助api,它返回一個const引用,所以我的指針永遠不能爲null(我無法想象這個函數會返回null的場景,即使它不知何故返回null,在這種情況下,const ref版本的行爲是什麼)。或者我應該說,我知道它的堆棧上的現有對象的地址,所以它不能爲空?這是對此進行思考或推理的正確方法嗎?如果有人以其他方式思考,請給出一些示例代碼。如果我使用協議緩衝區,我已經知道生成的代碼爲我的消息模板(例如:像stl容器重複的字段),但我仍然需要做null檢查每次我想使用可變的API,因爲他們總是通過指針或const引用返回。通過引用或指針返回並檢查null?
通過引用返回是不是我期待的。
它的代碼,所以這是你的選擇!請記住,如果方法是虛擬的,那麼所有的子類都需要遵守合約,否則你會遇到問題。 – John3136
是否與'常量矢量和數據()const'和'矢量和數據()'有問題嗎? –
chris
記住:如果你是'A'的對象是完全構造的,那麼'A :: x'也是完全構造的。 'x'不能成爲'NULL',因爲它不會被存儲在別的地方,並且可以通過指針間接訪問(而不是引用,因爲引用不能成爲NULL)。 –