读书人

学到一招特来分享并且有疑问解决方

发布时间: 2012-06-21 13:42:41 作者: rapoo

学到一招,特来分享,并且有疑问

C/C++ code
//---------------------------------------class MyClass{public:    MyClass(){printf("MyClass()\n");}    ~MyClass(){printf("~MyClass()\n");}};//---------------------------------------int main(void){    MyClass* tClass = (MyClass*)malloc(sizeof(MyClass));    new (tClass) MyClass;    tClass->~MyClass();    free(tClass);    return 0;}//---------------------------------------

发现这样可以调到构造析构函数,做对象池的时候可以用到,但是不理解,跟踪进new (tClass) MyClass
C/C++ code
//X:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\newinline void *__CRTDECL operator new(size_t, void *_Where) _THROW0(){   // construct array with placement at _Where    return (_Where);}


调试发现这里面直接就把我刚才malloc得到的指针返回了,而且在进来之前就已经进行构造函数了
有谁了解的吗,求大神解释下

[解决办法]
placement new 属于定位构造对象。

简单的理解就是把new operator 的内存分配功能去掉了
[解决办法]
基础知识,placement new,STL里到处都会用到。

读书人网 >C++

热点推荐