Warning
This page is located in archive.

9. přednáška

Operátory new a delete lze přetěžovat jako funkci (globální operátor) a nebo statickou metodu. V případě přetížení globálního operátoru bude tento volán při každém vytváření nové instance libovolného typu až do konce pběhu programu. Je-li přetypován globální operátor a zároveň zároveň je přetíženm i operátor pro některou třídu (přetížen jako statická metoda), bude pro tuto třídu vždy volán její statický operátor.

#include<iostream>
 
using namespace std;
 
class trida
{
private:
  int a;
public:
  trida(){}
  void *operator new (size_t s=1);
  void operator delete(void* p);
  ~trida(){}
};
 
void *operator new (size_t s=1)
{
  cout << "globalni new" << endl;
  void *p=malloc(s);
  return p;
}
 
void * trida::operator new (size_t s)
{
  cout << "lokalni new" << endl;
  void *p=malloc(s);
  return p;
}
 
void operator delete(void *p)
{
  cout << "globalni delete" << endl;
  free (p);
}
 
int main(void)
{
  int *p=new int(5);
  delete(p);
 
  trida *t=new trida();
  delete(t);
  return 0;
}

courses/a7b36pjc/lectures/09/newdelete_c.txt · Last modified: 2015/01/16 21:04 (external edit)