2013-03-29 2 views
1

Я пытаюсь использовать пул шаблонов объектов, у меня есть проблема с перегрузкой нового оператора размещения. новый оператор работает со стандартным конструктором, но не с нестандартными. здесь я вставляю свой простой код.аргументы конструктора пересылки для размещения нового оператора

#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; 
} 

ответ

3

Оператор 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

Смежные вопросы