Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
CODE PROJECT For Those Who Code
  • Home
  • Articles
  • FAQ
Community
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. Problem Overloading operator new in a template class

Problem Overloading operator new in a template class

Scheduled Pinned Locked Moved C / C++ / MFC
helpcsharpc++visual-studiodata-structures
2 Posts 2 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • J Offline
    J Offline
    JKallen
    wrote on last edited by
    #1

    I am over-riding operator new [] so that when an array of "Objects" is created they contain information about adjacent items in the array. I am getting the following error.... c:\Visual Studio Projects\JLib\main.cpp(149): error C2661: 'Object::operator new[]' : no overloaded function takes 3 arguments The following code results in the above comilation error. Object* objects; objects = new Object[5]; // <- error occurrs here delete [] objects; If anyone knows what is going on I would very much appreciate an explanation. Here is the relevant declarations and definitions... #pragma once #include using namespace std; template class Object{ public: //CONSTRUCTORS ETC ETC ETC void* operator new[](size_t size) throw(bad_alloc); void* operator new[](size_t size,const nothrow_t&) throw(); void operator delete[](void* ptr) throw(); void operator delete[](void* ptr,const nothrow_t&) throw(); //OTHER STUF }; template void* Object::operator new[](size_t size) throw(bad_alloc){ Object* data = 0; if ( (data = ::operator new[](size){ //ommitted for brevity } return data; } template void* Object::operator new[](size_t size,const nothrow_t&) throw(){ Object* data = 0; if ( (data = ::operator new[](size,const nothrow_t&)) ){ //ommitted for brevity } return data; } template void Object::operator delete[](void* ptr) throw(){ ::operator delete [] (ptr); ptr = 0; } template void Object::operator delete[](void* ptr,const nothrow_t&) throw(){ ::operator delete [] (ptr,const nothrow_t&); ptr = 0; }

    Z 1 Reply Last reply
    0
    • J JKallen

      I am over-riding operator new [] so that when an array of "Objects" is created they contain information about adjacent items in the array. I am getting the following error.... c:\Visual Studio Projects\JLib\main.cpp(149): error C2661: 'Object::operator new[]' : no overloaded function takes 3 arguments The following code results in the above comilation error. Object* objects; objects = new Object[5]; // <- error occurrs here delete [] objects; If anyone knows what is going on I would very much appreciate an explanation. Here is the relevant declarations and definitions... #pragma once #include using namespace std; template class Object{ public: //CONSTRUCTORS ETC ETC ETC void* operator new[](size_t size) throw(bad_alloc); void* operator new[](size_t size,const nothrow_t&) throw(); void operator delete[](void* ptr) throw(); void operator delete[](void* ptr,const nothrow_t&) throw(); //OTHER STUF }; template void* Object::operator new[](size_t size) throw(bad_alloc){ Object* data = 0; if ( (data = ::operator new[](size){ //ommitted for brevity } return data; } template void* Object::operator new[](size_t size,const nothrow_t&) throw(){ Object* data = 0; if ( (data = ::operator new[](size,const nothrow_t&)) ){ //ommitted for brevity } return data; } template void Object::operator delete[](void* ptr) throw(){ ::operator delete [] (ptr); ptr = 0; } template void Object::operator delete[](void* ptr,const nothrow_t&) throw(){ ::operator delete [] (ptr,const nothrow_t&); ptr = 0; }

      Z Offline
      Z Offline
      Zac Howland
      wrote on last edited by
      #2

      With GCC, the only error I get in your code is caused by the following (in bold):

      template <typename T> class Object{
          public:
          //CONSTRUCTORS ETC ETC ETC
      
              void* operator new[](size_t size) throw(bad_alloc);
              void* operator new[](size_t size,const nothrow_t& nt) throw();
              void operator delete[](void* ptr) throw();
              void operator delete[](void* ptr,const nothrow_t& nt) throw();
      
          //OTHER STUF
      
      };
      
      template <typename T> void* Object<T>::operator new[](size_t size) throw(bad_alloc){
          Object<T>* data = 0;
          if ( (data = ::operator new[](size){
                   //ommitted for brevity
          }
          return data;
      }
      
      template <typename T> void* Object<T>::operator new[](size_t size,const nothrow_t& nt) throw(){
          Object<T>* data = 0;
          if ( (data = ::operator new[](size, nt)) ){
                   //ommitted for brevity
          }
          return data;
      }
              
      template <typename T> void Object<T>::operator delete[](void* ptr) throw(){
          ::operator delete [] (ptr);
          ptr = 0;
      }
      
      template <typename T> void Object<T>::operator delete[](void* ptr,const nothrow_t& nt) throw(){
          ::operator delete [] (ptr, nt);
          ptr = 0;
      }
      

      If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week Zac

      1 Reply Last reply
      0
      Reply
      • Reply as topic
      Log in to reply
      • Oldest to Newest
      • Newest to Oldest
      • Most Votes


      • Login

      • Don't have an account? Register

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • World
      • Users
      • Groups