C++ c/c++;:在visual studio中自动将指针初始化为null

C++ c/c++;:在visual studio中自动将指针初始化为null,c++,c,visual-studio,c++11,C++,C,Visual Studio,C++11,我知道自动初始化未初始化的指针到null会带来开销。但我已经准备好应付这一开销 请注意,我不需要智能指针解决方案,因为我正在调试现有的应用程序。我不知道有任何这样的功能,而且我以前从未听说有人在寻找它 这似乎是一条非常危险的道路 当编写代码时,假设未初始化的指针是空指针,然后将代码迁移到IDE的新安装中,或者将其提供给其他人,会发生什么情况?你将很难找到UB bug。不好 相反: 启用未初始化变量的警告 初始化这些变量 或者,为了调试现有的中断代码,请使用Visual Studio为未初始

我知道自动初始化未初始化的指针到null会带来开销。但我已经准备好应付这一开销<那么,我如何使VisualStudio 2010 C++编译器将所有未初始化指针设置为NULL?< /强>


请注意,我不需要智能指针解决方案,因为我正在调试现有的应用程序。

我不知道有任何这样的功能,而且我以前从未听说有人在寻找它

这似乎是一条非常危险的道路

当编写代码时,假设未初始化的指针是空指针,然后将代码迁移到IDE的新安装中,或者将其提供给其他人,会发生什么情况?你将很难找到UB bug。不好

相反:

  • 启用未初始化变量的警告
  • 初始化这些变量
或者,为了调试现有的中断代码,请使用Visual Studio为未初始化的数据提供自动存储持续时间,即底层字节模式
0xCC
。查找此值,而不是
0x00


我不知道有这样的功能,我以前也从未听说有人在寻找它

这似乎是一条非常危险的道路

当编写代码时,假设未初始化的指针是空指针,然后将代码迁移到IDE的新安装中,或者将其提供给其他人,会发生什么情况?你将很难找到UB bug。不好

相反:

  • 启用未初始化变量的警告
  • 初始化这些变量
或者,为了调试现有的中断代码,请使用Visual Studio为未初始化的数据提供自动存储持续时间,即底层字节模式
0xCC
。查找此值,而不是
0x00


    • 使用智能指针。std::unique\u ptr,std::shared\u ptr,std::weak\u ptr。忘记未初始化的空指针。

      使用智能指针。std::unique\u ptr,std::shared\u ptr,std::weak\u ptr。忘记未初始化的空指针。

      您可以创建具有此行为的类,例如:

      template <typename T>
      class Ptr
      {
      public:
          Ptr() = default;
          Ptr(T*ptr) : ptr(ptr) {}
          // ...
          operator T*&() {return ptr;}
      private:
          T* ptr = nullptr;
      };
      
      模板
      类Ptr
      {
      公众:
      Ptr()=默认值;
      Ptr(T*Ptr):Ptr(Ptr){}
      // ...
      运算符T*&(){return ptr;}
      私人:
      T*ptr=nullptr;
      };
      
      您可以创建具有此行为的类,例如:

      template <typename T>
      class Ptr
      {
      public:
          Ptr() = default;
          Ptr(T*ptr) : ptr(ptr) {}
          // ...
          operator T*&() {return ptr;}
      private:
          T* ptr = nullptr;
      };
      
      模板
      类Ptr
      {
      公众:
      Ptr()=默认值;
      Ptr(T*Ptr):Ptr(Ptr){}
      // ...
      运算符T*&(){return ptr;}
      私人:
      T*ptr=nullptr;
      };
      
      什么是“c/c++”?选择一种要询问的语言。如果试图使用未初始化变量的值,可以让VS2010(以及其他一些编译器)发出警告。从长远来看,启用此类警告,并编写代码消除此类警告,比尝试启用会导致问题的非标准行为要好。@LightnessRacesinOrbit:公平地说,“C/C++”长期以来一直是MSVC的合理描述。它也不是C和C++,缺少了所有的C99和相当多的C++块。什么是“C/C++”?选择一种要询问的语言。如果试图使用未初始化变量的值,可以让VS2010(以及其他一些编译器)发出警告。从长远来看,启用此类警告,并编写代码消除此类警告,比尝试启用会导致问题的非标准行为要好。@LightnessRacesinOrbit:公平地说,“C/C++”长期以来一直是MSVC的合理描述。它也不是C和C++,缺少了所有的C99和相当多的C++块。注意这些值只出现在调试构建(禁止奇怪的构建配置)@ YAK:“用于调试现有的破译代码”中,意在暗示这一点;还有更多信息的链接。但也许我应该更清楚一点,注意那些值只出现在调试构建中(除非奇怪的构建配置)@Yakk:“用于调试现有的坏代码”意在暗示这一点;还有更多信息的链接。但也许我应该更清楚一点。