C++:placement new的概念及使用

/ C++ / 没有评论 / 1921浏览

placement new :它不分配内存,只是返回指向已经分配好的某段内存的一个指针。因此不能删除它,但需要调用对象的析构函数。

注意点:一定要调用外在的析构函数

demo:

#ifndef EXERCISE_PLACE_NEW_H
#define EXERCISE_PLACE_NEW_H

#include <iostream>

using namespace std;

class X
{
    X()
    {
        cout<<"constructor of X"<<endl;
    }
    ~X()
    {
        cout<<"destructor of X"<<endl;
    }

    void SetNum(int n)
    {
        num = n;
    }

    int GetNum()
    {
        return num;
    }

private:
    int num;
};

int main()
{
    char* buf = new char[sizeof(X)];
    X *px = new(buf) X;  // ******
    px->SetNum(10);
    cout<<px->GetNum()<<endl;
    px->~X();
    delete []buf;
    return 0;
}