读书人

placement new 有关问题

发布时间: 2012-04-27 11:57:44 作者: rapoo

placement new 问题

C/C++ code
#include <new>class CTest{public:    CTest()    {}    CTest( int)    {}    /* 代码*/};    char strBuff[ sizeof( CTest) * 10 + 100];    CTest * pBuffer = ( CTest *)strBuff;    // 缺省构造    CTest * pFirst = new(pBuffer) CTest;    // 缺省构造    CTest * pSecond = new(pBuffer + 1) CTest;    // 带参数的构造;    // 不理会返回的指针    new(pBuffer + 2) CTest( 5);    // 带参数的构造    CTest * pFourth = new( pBuffer + 3) CTest( 10);    // 缺省构造    CTest * pFifth = new(pBuffer + 4) CTest();    // 构造多个元素(缺省构造)    CTest * pMultipleElements = new(pBuffer + 5) CTest[ 5];




编译出错 vs2005

这是为啥

[解决办法]
VC6试了,没有错~~
C/C++ code
class CTest{public:    CTest()    {}    CTest( int)    {}};int main(int argc, char* argv[]){    char strBuff[ sizeof( CTest) * 10 + 100];    CTest * pBuffer = ( CTest *)strBuff;    // 缺省构造    CTest * pFirst = new(pBuffer) CTest;    // 缺省构造    CTest * pSecond = new(pBuffer + 1) CTest;    // 带参数的构造;    // 不理会返回的指针    new(pBuffer + 2) CTest( 5);    // 带参数的构造    CTest * pFourth = new( pBuffer + 3) CTest( 10);    // 缺省构造    CTest * pFifth = new(pBuffer + 4) CTest();    // 构造多个元素(缺省构造)    CTest * pMultipleElements = new(pBuffer + 5) CTest[ 5];    system("pause");    return 0;}
[解决办法]
CTest似乎没有存储空间吧,具体怎样不太了解,但感觉上sizeof(CTest)=0
另外,你可以这样试试:int pBuffer;CTest *pTest=(CTest*)strBuf;pBuffer = (int)pTest; CTest * pFirst = new(pBuffer) CTest;
……
[解决办法]
测试了一下,将代码
探讨

char strBuff[ sizeof( CTest) * 10 + 100];
CTest * pBuffer = ( CTest *)strBuff;

……

读书人网 >C++

热点推荐