Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <new>
- #include <boost/pool/singleton_pool.hpp>
- class Data {
- public:
- Data(int first) {
- data[0] = first;
- }
- Data(int first, int second) {
- data[0] = first;
- data[1] = second;
- }
- void* operator new(size_t x);
- void* operator new(size_t x, const std::nothrow_t& nothrow_value) throw();
- void operator delete(void* ptr);
- private:
- int data[10];
- };
- class DataTag;
- typedef boost::singleton_pool<DataTag, sizeof(Data)> DataPool;
- void* Data::operator new(size_t x) {
- void* ptr = DataPool::malloc();
- if (ptr) {
- return ptr;
- } else {
- throw std::bad_alloc();
- }
- }
- void* Data::operator new(size_t x, const std::nothrow_t& nothrow_value) throw() {
- return DataPool::malloc();
- }
- void Data::operator delete(void* ptr) {
- DataPool::free(ptr);
- }
- int main() {
- Data* data = new Data(1);
- delete data;
- data = new (std::nothrow) Data(1, 2);
- delete data;
- }
Advertisement
Add Comment
Please, Sign In to add comment