C++ 解析标准的新建/删除运算符
请参阅此问题了解一些上下文: 我有以下计划:C++ 解析标准的新建/删除运算符,c++,visual-studio-2010,memory-management,C++,Visual Studio 2010,Memory Management,请参阅此问题了解一些上下文: 我有以下计划: #include <iostream> int main( int argc, char* argv[] ) { std::cout << "Hello world" << std::endl; int *p; p = new int(3); std::cout << *p << std::endl; delete p; return 0
#include <iostream>
int main( int argc, char* argv[] )
{
std::cout << "Hello world" << std::endl;
int *p;
p = new int(3);
std::cout << *p << std::endl;
delete p;
return 0;
}
#包括
int main(int argc,char*argv[])
{
std::cout指定链接器选项“/DEFAULTLIB:MSVCRT.LIB”
导致程序成功执行。是否解决了您的问题?如果不对::operator new
执行相同操作,很难相信库正在重写::operator delete
@Praetorian,虽然它是相关的,但并不完全正确。在这里,我不尝试使用Abaqus ODB API(尚未)。我相信Abaqus同时定义了new
和delete
。在这种情况下,这更像是一个链接问题。@Derek:在我看来,Praetorian是正确的-在调用Abaqus的init函数之前,你不能使用Abaqus库的new
或delete
。因为标准库是链接的在Abaqus之后,您将获得Abaqus版本,而不是C运行时的版本。这似乎是一种相当疯狂的方式,但是,嘿,我不为Abaqus工作,所以我不知道他们在吸烟、饮酒或思考什么,当他们提出解决方案时-也许它解决了其他一些很难用其他方式解决的问题。@很抱歉,也许我的问题还不清楚。我已经花了好几个月的时间使用Abaqus ODB API,所以我对它的正确初始化非常熟悉。请查看我的代码。我不想使用Abaqus ODB API。我不想使用Abaqus提供的new
或delete
运算符——这些运算符不应该是污染全局名称空间。但是,我发现它们的实现在全局名称空间中,我想绕过它们的实现。这有帮助吗?@Derek,这可以解释问题。应该有其他Abaqus提供的库,其中对应的操作符delete
定义驻留在其中。您可能会如果在文档中找不到任何相关信息,您需要联系他们的支持人员。尽管如此,Dependency Walker仍显示包含其新操作员定义的Abaqus.dll已链接。