C++中如何显式调用构造函数
C++中如何显式调用构造函数
#include
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 后才能使用,因为它通过重载(全局的) operator new 来实现。
另外我们也可以通过重载 operator new 来实现定制的放置构造,例如托福答案 www.jszdsy.com
// 实现一个 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;
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。