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
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++题目--如何让new操作符不分配内存,只调用构造函数
- 网易校园招聘c++题目--如何让new操作符不分配内存,只调用构造函数
- C++构造函数详解及显式调用构造函数
- 在C#的构造函数中,如何显式的先调用父类或者是自己的构造函数?
- 网易校园招聘c++题目--如何让new操作符不分配内存,只调用构造函数
- C++子类如何调用父类构造函数
- C++构造与析构(19) - 显式地调用构造函数和析构函数
- 多重继承、虚基类继承时,没有显式调用基类构造函数,对象是如何初始化的问题
- 【转】 C++中如何在一个构造函数中调用另一个构造函数
- (转载)网易校园招聘c++题目--如何让new操作符不分配内存,只调用构造函数
- C++中显式和隐式调用(直接返回结构体如何生成对象)
- C++中构造函数和析构函数显式调用的方法
- 网易校园招聘c++题目--如何让new操作符不分配内存,只调用构造函数
- [C/C++不常见语法特性]_[强制显式调用构造函数explicit]
- C++中如何在一个构造函数中调用另一个构造函数
- C++如何在派生类成员函数内调用基类的成员函数(包括构造函数)
- c++中构造函数调用另一构造函数的问题,如何避免生成临时对象
- [C/C++不常见语法特性]_[强制显式调用构造函数explicit]
- 网易校园招聘c++题目--如何让new操作符不分配内存,只调用构造函数
- 多重继承、虚基类继承时,显式地调用基类构造函数,对象是如何初始化的问题