class Test
{
..........
}
int main()
{
char* buffer=new char[512];
Test *pc1;
pc1=new (buffer)Test;//what does it mean?
..................
class Test
{
..........
}
int main()
{
char* buffer=new char[512];
Test *pc1;
pc1=new (buffer)Test;//what does it mean?
..................
2006-07-25 11:11
2006-07-25 11:24
首先:
char* buffer=new char[512];
这里动态分配了512g个char的内存空间A。
pc1=new (buffer)Test;占用以是A的首地址为起点A的空间。
也就是说,比如空间A占的地址是:
0x000000 0x000004 0x000008 0x00000c
假设Test的类是这样的:
class Test{public:int a;int b;}
那么上面的表达式:
Test中a,b占用的空间是A的,a的地址&a其实就是&buffer[0].
由于一个int增加4,所以b的地址&b就是&buffer[0+4];
理解意思了?
2006-07-25 11:26
2006-07-25 11:30

2006-07-25 15:13
首先:
char* buffer=new char[512];
这里动态分配了512g个char的内存空间A。
pc1=new (buffer)Test;占用以是A的首地址为起点A的空间。
也就是说,比如空间A占的地址是:
0x000000 0x000004 0x000008 0x00000c
假设Test的类是这样的:
class Test{public:int a;int b;}
那么上面的表达式:
Test中a,b占用的空间是A的,a的地址&a其实就是&buffer[0].
由于一个int增加4,所以b的地址&b就是&buffer[0+4];
理解意思了?
正确

2006-07-25 15:28

应该说new定位操作符号, 因为是 placement new

2006-07-25 15:29
2006-07-25 15:34
应该说new定位操作符号, 因为是 placement new
说就说“placement new”,很多术语还是不翻译的好,影响交流,比如著名的"inline function"。。。

2006-07-25 15:39
说就说“placement new”,很多术语还是不翻译的好,影响交流,比如著名的"inline function"。。。
深有同感

2006-07-25 15:46