首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++的定位new有关问题

2012-09-24 
C++的定位new问题我有个问题想问问各位,在c++中的定位new的实现怎么理解,以下是定位new的代码#ifndef __PL

C++的定位new问题
我有个问题想问问各位,在c++中的定位new的实现怎么理解,以下是定位new的代码
#ifndef __PLACEMENT_NEW_INLINE
#define __PLACEMENT_NEW_INLINE
inline void *__cdecl operator new(size_t, void *_P)
{
  return (_P); 
}
  举个例子
#include <iostream>
#include <new>
using namespace std;
class A
{
public:
int a;
A()
{
a = 4;
}
A(int s)
{
a = s;
}
};
int main()
{
char *p = new char[10];
A *p1 = new (p) A(5);
//我认为这条语句之后接变成了A *p1 =(A *) p;因为定位new仅仅返回指针而已
  //但是如果我用A *p1 =(A *) p;代替上面一条语句的话,输出为乱码
cout<<p1->a<<endl;
return 0;
}
这时候的结果就是5,但是为什么呢?我们知道定位是重载的new操作符,为什么return (_P);就可以完成了对p1对象的构造,
我要怎么理解定位new的实现,在C++对象模型一书中有提到过定位new问题,书中的解释是这样的
A *p1 = new (p) A(5); 相当于A *p1 =(A *) p; 而后在调用构造函数初始化p1所指向的对象
  但是我的问题就是这里,从语法的角度来说A *p1 = new (p) A(5); 相当于A *p1 =(A *) p;
为什么返回一个指针就会调用该指针所指向对象的构造函数呢?这是那本书里写的?还是我理解的根本就错了,麻烦各位帮忙看看,非常感谢
   



[解决办法]

C/C++ code
class A{public:    int a;    A():a(4){}    A(int s):a(s){}};int main(){    char p[10];    A *q=new(p)A(5);    return 0;} 

热点排行