gpt4 book ai didi

c++ - 将构造函数参数转发给放置新运算符

转载 作者:行者123 更新时间:2023-11-30 02:56:19 25 4
gpt4 key购买 nike

我正在尝试使用模板化对象池,但我无法重载放置新运算符。 new 运算符适用于默认构造函数,但不适用于非默认构造函数。我在这里粘贴我的简单代码。

#include <boost/pool/object_pool.hpp>
#include <cstddef>

template<typename T>
class objectPool
{
public:
void* operator new (std::size_t num) { void *vp = _pool.malloc(); T *t = ::new(vp)T; return t; }
void* operator new[] (std::size_t num) { void *vp = NULL; assert(0); return vp; }
void operator delete (void *vp) { _pool.free(static_cast<T*>(vp)); return; }
void operator delete [] (void *vp) { assert(0); return; }

private:
static boost::object_pool<T> _pool;
};

template<typename T>
boost::object_pool<T> objectPool<T>::_pool;

class number : public objectPool<number>
{
long long _value1, _value2;
public:
number(long long value1, long long value2) : _value1(value1), _value2(value2) { return; }
~number(){ return; }
void print() { std::cerr<<"_value1:"<<_value1<<"_value2:"<<_value2; return; }
};

int
main(int ac, char **av)
{
number *n = new number(1000, 2000);
n->print();
delete n;
return 0;
}

最佳答案

Operator new 不调用构造函数,它分配内存 http://www.cplusplus.com/reference/new/operator%20new/

当你使用它时,构造函数被调用:

//normal new
new T(a1, a2);
//placement new
new (na1, na2) T(a1, a2)

你应该在你的 new 运算符中删除新的调用并返回 vp

关于c++ - 将构造函数参数转发给放置新运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15704436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com