C++ 为什么是C++;在链接库中创建的Std库容器是否为非空?

C++ 为什么是C++;在链接库中创建的Std库容器是否为非空?,c++,json,poco-libraries,C++,Json,Poco Libraries,我试图将一个库(Poco Project-JSON)链接到我的项目,该项目本身输出一个动态库(dll) 当我创建这个库中定义的类的实例(JSON“对象”)时,它的默认构造函数会创建一个std::map和一个std::deque,这两个类有时被创建为非空的(我观察到其中一个具有这种行为)。这自然会导致以后出现未定义的行为 只有当我的项目处于发布模式(调试符号打开)时,才会发生这种情况。为了确保这不是因为某些发布模式调试器问题,我打印了容器的大小-结果相同 我想使用的库是Poco“Foundatio

我试图将一个库(Poco Project-JSON)链接到我的项目,该项目本身输出一个动态库(dll)

当我创建这个库中定义的类的实例(JSON“对象”)时,它的默认构造函数会创建一个std::map和一个std::deque,这两个类有时被创建为非空的(我观察到其中一个具有这种行为)。这自然会导致以后出现未定义的行为

只有当我的项目处于发布模式(调试符号打开)时,才会发生这种情况。为了确保这不是因为某些发布模式调试器问题,我打印了容器的大小-结果相同

我想使用的库是Poco“Foundation”和“JSON”,我自己在同一个IDE中编译了这两个库(我必须使用VS 2008),我已经保证运行时库设置在所有三个POject中都是相同的(多线程DLL/md)

我尝试了静态链接和动态链接-结果相同。
那么,这是怎么回事,我还遗漏了哪些其他设置需要检查呢?

对于那些感兴趣的人,我想我自己已经找到了答案:在项目中其他一些奇怪的预处理器定义中,某个地方
\u SECURE\u SCL=0
已设置


删除此定义导致Poco库使用的预期行为(构造函数创建的空对象),但“主”应用程序却崩溃了。因此,我将主项目的预处理器定义复制到poco项目中,并重新构建它们(Foundation和JSON)。现在似乎有用。

@Elemental,对,更改了标题。如前所述,我尝试了Poco LIB的静态和动态,实际项目的输出是一个dll。第二:这真的能解释糟糕的std容器构造吗?我怎么能检查这个?非常有趣-没想到\u SECURE\u SCL是在Poco项目中定义的吗?@Alex No,\u SECURE\u SCL是在我想使用Poco的项目中定义的。同时我发现,VisualStudio2008即使在发布模式下,也会根据默认值激活安全SCL。由于这导致了相当多的性能降低(例如使用hash_-map),许多开发人员当时决定明确关闭它。然而,显然所有使用的代码和lib也必须停用它。看看这个。