考慮下面的代碼:當auto_ptr未初始化時,get()是可靠的嗎?
std::auto_ptr<std::string> p;
if (p.get() == 0) {
...
}
是在get()
成員函數用於檢查p
尚未初始化的標準和可靠的方式?不管平臺,編譯器,編譯器的優化標誌等,它總會返回0嗎?
考慮下面的代碼:當auto_ptr未初始化時,get()是可靠的嗎?
std::auto_ptr<std::string> p;
if (p.get() == 0) {
...
}
是在get()
成員函數用於檢查p
尚未初始化的標準和可靠的方式?不管平臺,編譯器,編譯器的優化標誌等,它總會返回0嗎?
的auto_ptr
的get
方法沒有前提條件。
也就是說,它始終是安全調用該方法,無論處於何種狀態auto_ptr
對象是。
與operator*
成員函數,它確實有get() != 0
的前提對比這一點。 C++標準爲條款中的成員函數指定了前提條件。如果一個函數沒有這樣的子句,那麼調用它總是安全的。
有沒有這樣的事情作爲聯合國未初始化std::auto_ptr
,在default constructor指針初始化爲0
:
explicit auto_ptr(X* p = 0);
因此get()
將有效地返回 「0
」 在默認構造std::auto_ptr
。
在這個例子中,'auto_ptr'是* not *「未初始化」。默認構造函數將指針初始化爲空指針。 –