2015-10-05 32 views
1

我知道開銷涉及到自動初始化未初始化的指針爲null。但我已經準備好了這個開銷; 那麼我該如何讓Visual Studio 2010 C++編譯器將所有未初始化的指針設置爲null。c/C++:在Visual Studio中自動初始化指針爲空

請注意我不需要智能指針解決方案,因爲我正在調試現有的應用程序。

+5

什麼是 「C/C++」?選擇一種語言_詢問一下。 –

+2

如果嘗試使用未初始化變量的值,可以使VS2010(以及其他幾個編譯器)發出警告。從長遠來看,實現此類警告和編碼以消除此類警告的做法會比改善導致問題下降的非標準行爲更好。 – Peter

+0

@LightnessRacesinOrbit:公平地說,「C/C++」長期以來一直是MSVC的公平描述。它也不是C和C++,都缺少C99以及C++ 98的很多塊。 – MSalters

回答

9

我不知道有任何這樣的功能,我從來沒有聽說過有人在尋找它。

這似乎是一個非常危險的路徑。

當您將代碼寫入時,會發生什麼情況?假設未初始化的指針是空指針,那麼您將代碼遷移到IDE的新安裝,還是將其提供給其他人?你會傳播難以發現的UB錯誤。不好!

相反:

  • 打開警告,未初始化變量
  • 初始化的變量

或者,調試現有的斷碼,使用的事實,Visual Studio中給出了未初始化的數據自動存儲持續時間的基礎字節模式0xCC。尋找這個值,而不是0x00

+0

請注意,這些值只出現在調試版本(禁止奇怪的生成配置) – Yakk

+0

@Yakk:_「用於調試現有的破碎的代碼」_旨在暗示;還有更多信息的鏈接。但也許我應該更清楚。 –

1

使用智能指針。 std :: unique_ptr,std :: shared_ptr,std :: weak_ptr。忘記未初始化的空指針。

1

您可以創建一個類這種行爲,是這樣的:

template <typename T> 
class Ptr 
{ 
public: 
    Ptr() = default; 
    Ptr(T*ptr) : ptr(ptr) {} 
    // ... 
    operator T*&() {return ptr;} 
private: 
    T* ptr = nullptr; 
};