在我的項目中,大多數對象都是在競技場中創建的,並且可以保證它們在用戶會話期間存在。 所以這是相當安全的一些類,以便const引用作爲成員字段,例如:防止通過引用傳遞右值
class A {
public:
A(const string& str) : str_(str) {}
private:
const string& str_;
};
但這裏有一個陷阱。錯誤有可能產生的A
實例的方式如下:
A a("some temporal string object");
在該行的時間string
對象已隱式創建和銷燬。那之後a
存儲不正確的參考。
如何防止這種行爲?它會更好,如果它導致編譯錯誤...
如果你的競技場剛分配的內存大塊它不應該難以檢查'this'是否屬於它,並在構造函數中添加相關的'assert'。另一種方法是將構造函數設爲私有,並提供一個使用舞臺來分配對象的工廠方法。這也具有在編譯時檢測到錯誤的優點。 –
沒有等待,我現在意識到你想要爲任意類型工作,所以第二種方法是不可行的。 –
@MatteoItalia,是的,類型不應該知道競技場的任何東西)而我寫的競技場只是爲了證明引用作爲成員字段。 – Alexey