Przeciążenie operatora new

0

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

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
  1. Pokaż ci masz.
  2. Operator new służy do przydzielania i tylko taką powinien mieć odpowiedzialność.
  3. 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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1