学到一招,特来分享,并且有疑问
- 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里到处都会用到。