C++ 在没有stl调试信息的情况下编译Google协议缓冲区的含义

C++ 在没有stl调试信息的情况下编译Google协议缓冲区的含义,c++,stl,protocol-buffers,C++,Stl,Protocol Buffers,我有一些档案。我们称之为Msg.proto 我使用Google的Protocol Buffer protoc.exe编译器获取我的proto文件,它生成一个Msg.h文件,其中包含Msg类的定义 当我删除一个Msg对象时,可能需要很长时间才能释放内存(当调试器被连接时)。这是因为它正在使用STL调试库。因此,我想在删除Msg对象时禁用STL调试,但我想在项目的其余部分保留STL调试。这导致我考虑关闭MSG.h和谷歌协议缓冲区项目的STL调试信息(因为这是MSG类使用的,并且仅由MSG类使用)。

我有一些档案。我们称之为Msg.proto

我使用Google的Protocol Buffer protoc.exe编译器获取我的proto文件,它生成一个Msg.h文件,其中包含Msg类的定义

当我删除一个Msg对象时,可能需要很长时间才能释放内存(当调试器被连接时)。这是因为它正在使用STL调试库。因此,我想在删除Msg对象时禁用STL调试,但我想在项目的其余部分保留STL调试。这导致我考虑关闭MSG.h和谷歌协议缓冲区项目的STL调试信息(因为这是MSG类使用的,并且仅由MSG类使用)。 这意味着什么

我猜的是:

  • 使用STL调试信息创建的STL对象不能传递到Msg的任何函数/构造函数/etc中,因为这意味着如果STL库被传递到使用不同版本STL库的代码部分,则创建的STL对象只有一个版本
  • 其他人

  • 如果只对一个类禁用调试(如上所述),则很可能最终违反了正确的规则。你可以保证它会被冲洗掉。我被告知我可以使用Visual Studio为单个文件设置预处理器定义,从而禁用对这些文件的调试。你是说永远不应该这样做?我相信这是可以做到的,如果你小心的话。这正是我正在考虑的,但我想知道这意味着什么。