您的位置:首页 > 编程语言 > C语言/C++

C++中如何显式调用构造函数

2014-06-26 18:39 561 查看
#include <new>

class A {

public:

    A();

    A(int);

    ...

};

A * pA = (A *) malloc( sizeof(A) );

new (pA) A; // 调用A()

A * pAA = (A *) malloc( sizeof(A) * 10 );

for (int i = 0; i < 10; ++i)

    new (pAA + i) A(i); // 调用A(int)

以上用法也称为放置构造,它是与第三方内存管理的标准接口,必须 include <new> 后才能使用,因为它通过重载(全局的) operator new 来实现。

另外我们也可以通过重载 operator new 来实现定制的放置构造,例如:

// 实现一个 pool

class my_pool {

    ...

};

...

class A {

    ...

public:

    // 重载 operator new 来实现从 pool 中分配对象,不重载全局 operator new 可以保证只有该类可以使用定制的放置构造方法

    static void * operator new (size_t size, my_pool & pool) {

        ...

   }

    ...

};

...

// 定制的放置构造用法

my_pool myPool;
A * pA = new (myPool) A;

参考:

operator new


allocator::construct
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 编程 语言
相关文章推荐