Witam serdecznie.
Chcę, aby operator new oprócz przydzielenia pamięci wyświetlił także "Utworzono obiekt".
W jaki sposób mogę przeciążyć operator new ?
0
0
Nie jestem specem od C++ ale czy nie wystarczy coś takiego:
void* operator new(std::size_t size)
{
std::printf("Utworzono obiekt\n");
return std::malloc(size);
}
0
- Pokaż ci masz.
- Operator
new
służy do przydzielania i tylko taką powinien mieć odpowiedzialność. - Dodawanie dodatkowych odpowiedzialności łamie zasadę SRP.
4
http://en.cppreference.com/w/cpp/memory/new/operator_new
https://pl.wikibooks.org/wiki/C%2B%2B/Przeci%C4%85%C5%BCanie_operator%C3%B3w#New_i_delete
#include <iostream>
// class-specific allocation functions
struct X {
static void* operator new(std::size_t sz)
{
std::cout << "custom new for size " << sz << '\n';
return ::operator new(sz);
}
static void* operator new[](std::size_t sz)
{
std::cout << "custom new for size " << sz << '\n';
return ::operator new(sz);
}
};
int main() {
X* p1 = new X;
delete p1;
X* p2 = new X[10];
delete[] p2;
}
0
Poczytaj też o alokatorach :)
1
kubaszy121 napisał(a):
Chcę, aby operator new oprócz przydzielenia pamięci wyświetlił także "Utworzono obiekt".
Operator new nie tworzy obiektów, robi to konstruktor.