【发布时间】:2011-03-18 15:46:51
【问题描述】:
与我的问题最接近的主题是here。我正在尝试使用 gcc 编译以下代码:
#include <malloc.h>
class A
{
public:
A(){};
~A(){};
};//class A
int main()
{
A* obj = (A*) malloc( sizeof(A) );
if(obj==0) return 1 ;
obj->A::A(); /*error: invalid use of 'class A' */
obj->A::~A();
free(obj);
return 0;
};//
我从命令行编译代码:
$ g++ -o main main.cpp main.cpp:在函数“int main()”中: main.cpp:22:错误:“A 类”的使用无效
你能指出我正确的方向吗?
【问题讨论】:
-
你为什么要这样做?当 new 失败时,您是否试图避免异常?只需使用
new (nothrow)然后测试 NULL。 -
@Amardeep,我能想到的一个例子是网络服务服务器实现,在对象被序列化之前你不能删除它们,当它们被序列化时你没有控制线程,所以你不能调用析构函数,工具包或框架必须
free那个。为您提供和管理的内存是通过malloc进行的,那么除了使用它别无他法。 (如果他们不提供自定义的new运算符,它会在他们的堆上分配并删除它们。) -
@Amardeep :但我看到它看起来不像那种情况。所以 +1 你的问题。
-
@Gollum:我不相信。您对此网络服务器有任何引用吗?