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

#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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值