申请一段足够长的空间,在空间首地址上运行类构造函数的行为,是否有不安全的地方?

menzi11 2011-11-23 01:41:58
申请一段足够长的空间,在空间首地址上运行类构造函数的行为,是否有不安全的地方?
听说new和delete就是这么干的但是有点不放心,我的意思:
比如:

class A;


A* p=(A*)malloc(sizeof(A));
p->A();


要释放的时候:
p->~A();
free(p);

谢谢~
...全文
82 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
menzi11 2011-11-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 demon__hunter 的回复:]

lz竟然对new 和delete不放心
[/Quote]

对new放心才应该呢,公司自己的内存池,用普通的new会被骂死的.
qq120848369 2011-11-23
  • 打赏
  • 举报
回复
这样做是错的,只能这么告诉你。

new的就要delete,malloc的才free,虽然你明白原理,但你这样做就是错的。
机智的呆呆 2011-11-23
  • 打赏
  • 举报
回复
lz竟然对new 和delete不放心
追求执着 2011-11-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mingliang1212 的回复:]
class A;


A* p=(A*)malloc(sizeof(A));
p->A();//这个是语法错误,不能这样调用构造函数,应该这样: new(p) A;


要释放的时候:
p->~A();
free(p);//释放的时候是这样。



C/C++ code



class A{
public:
A(){
std::co……
[/Quote]
嗯,很不错的讲解!!学习!!
Snight 2011-11-23
  • 打赏
  • 举报
回复
不能用对象这么调用构造函数,除非你是模板类
qscool1987 2011-11-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mingliang1212 的回复:]
class A;


A* p=(A*)malloc(sizeof(A));
p->A();//这个是语法错误,不能这样调用构造函数,应该这样: new(p) A;


要释放的时候:
p->~A();
free(p);//释放的时候是这样。



C/C++ code


class A{
public:
A(){
std::cout……
[/Quote]

原来是这样用的,见识了!
menzi11 2011-11-23
  • 打赏
  • 举报
回复
原来是语法不对...我说怎么编译不过..
非常感谢! 另外如此做会不会有任何安全隐患?

PS:我知道new,但目前的情况是原生的new不让用...
LinkSe7en 2011-11-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mingliang1212 的回复:]

class A;


A* p=(A*)malloc(sizeof(A));
p->A();//这个是语法错误,不能这样调用构造函数,应该这样: new(p) A;


要释放的时候:
p->~A();
free(p);//释放的时候是这样。


C/C++ code


class A{
public:
A(){
std::cout<<"A()……
[/Quote]
++
iamnobody 2011-11-23
  • 打赏
  • 举报
回复
class A;


A* p=(A*)malloc(sizeof(A));
p->A();//这个是语法错误,不能这样调用构造函数,应该这样: new(p) A;


要释放的时候:
p->~A();
free(p);//释放的时候是这样。




class A{
public:
A(){
std::cout<<"A()";
}
};
int main()
{
A* p = (A*)malloc(sizeof(A));;
new(p)A;

p->~A();
free(p);

system("pause");
return 0;
}




综上,C++中没有必要使用maclloc;如果你只想分配内存,不想构造,可以这样:

void *p = ::operator new(n*sizeof(A));//用法和功能和malloc相似,但是这个更好。

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧