placement new assignment

    技术2022-05-11  55

    使用new操作符在一个指定的内存块上构造一个对象。

    [::] new [placement] new-type-name [new-initializer]

    这里讨论的就是这个placement选项,它表示了一个内存的地址,也就是我们要构造的对象要放置于的一个内存块的开始地址,当然这个内存块应该放下我们要构造的对象。

    使用如下:

    class A

    {

    public:

    A(int_a)

    {m_a = _a;}

    ~A(){};

    private:

        int m_a;

    };

    char *pc  = new char[sizeof(A)];//分配一块内存区域,其大小为sizeof(A);这样就够大了。

    A*pA = new(pc)A(10);//这样就以pc所指向的一个内存区域上构造了A的对象,

    //为了以后能继续使用pc这一个内存,我们删除pA时不能用delete而只能显示调 用A的析构函数;

    pA->~A();

    A*pB = new(pB)A(11);//再一次使用pc这一个内存区域.

    delete pB;//此处用delete是因为我们不再使用pc这一块内存了,当然要释放掉.

    //也可以用下面的方法释放掉

    //pB->~A();

    //delete [] pc;


    最新回复(0)