返回   cpper编程论坛 > C/CPP/TMP/GP
注册账号 论坛帮助 会员列表 日历事件 搜索 今日新帖 标记版面已读

回复
 
LinkBack 主题工具 显示模式
  #1 (permalink)  
旧 2008-09-28
初级会员
 
注册日期: 2008-09-28
帖子: 2
刺儿头 正向着好的方向发展
默认 关于placement new的问题

我在VS2005下建一个MFC工程,编写如下代码

int * p = new int[5];
new ( p ) int[5];

编译器提示语法错误C2061,标识符“p”

但是新建一个win32控制台项目,就能编过去。是为什么呢?难道MFC又重载了placement new?
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #2 (permalink)  
旧 2008-09-28
polyrandom 的头像
超级版主
 
注册日期: 2002-09-03
帖子: 3,138
文章: 20
polyrandom 正向着好的方向发展
默认 回复: 关于placement new的问题

可能是因为VC把new通过宏定义替换掉的,至少在debug mode下应该是这样的。
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #3 (permalink)  
旧 2008-09-30
初级会员
 
注册日期: 2008-09-28
帖子: 2
刺儿头 正向着好的方向发展
默认 回复: 关于placement new的问题

昨天无意中发现了答案,MFC里面在使用placement new操作符的时候是这样用的

比如
#pragma push_macro("new")
#undef new
::new( (void*)( &pNode->data ) ) TYPE;
#pragma pop_macro("new")

看来mfc确实做了手脚。哈哈

而且在查看<new>头文件时,发现
#ifdef _MSC_VER
#pragma pop_macro("new")

太变态了。哎。

此帖于 2008-09-30 12:18 AM 被 刺儿头 编辑.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
  #4 (permalink)  
旧 2008-10-06
普通会员
 
注册日期: 2006-04-17
帖子: 59
ltqin 正向着好的方向发展
默认 回复: 关于placement new的问题

引用:
作者: 刺儿头 查看帖子
昨天无意中发现了答案,MFC里面在使用placement new操作符的时候是这样用的

比如
#pragma push_macro("new")
#undef new
::new( (void*)( &pNode->data ) ) TYPE;
#pragma pop_macro("new")

看来mfc确实做了手脚。哈哈

而且在查看<new>头文件时,发现
#ifdef _MSC_VER
#pragma pop_macro("new")

太变态了。哎。
这个还不是最变态的,它的一些STL的placement new就没有这样写,搞的我想在stdafx.h中不能重新定义宏代替new,只好在每个CPP中加。
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
回复时引用此帖
回复

书签

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码
Trackbacks are 启用
Pingbacks are 启用
Refbacks are 启用



所有时间均为格林尼治时间 +9。现在的时间是 06:28 AM


Powered by vBulletin® 版本 3.7.0
版权所有 ©2000 - 2009,Jelsoft Enterprises Ltd.
(C) Copy Right All Right Reserved 2001 - 2007

Search Engine Friendly URLs by vBSEO 3.1.0