kfyatek.jogger.pl
Retrotechnologiczne ciekawostki - this w C++
08 lutego 2010, 05:34:14 | Komputery | Techblog
class SomeClass {
public:
SomeClass() {
this = someFancyMalloc();
// initialization
}
~SomeClass() {
// deinitialization
this = NULL;
}
};
Tak kiedyś w C++ można było przejąć kontrolę nad (de)alokowaniem obiektów. Przypisanie pod this w konstruktorze oznaczało, że obiekt zostanie zainicjzowany pod wskazanym adresem, a przypisanie zera pod this w destruktorze powodowało, że nie zostanie wywołana dealokacja.
Tak się to robiło, kiedy nie było placement new, ani przeciążania new/delete. Jeśli kompilator znalazł w ciele konstruktora przypisanie pod this, nie alokował pamięci, this na początku było NULLem, i trzeba było się o to zatroszczyć samemu. Można też w kodach spotkać się z ifem sprawdzającym czy this jest nullem - nie będzie przy tworzeniu tablicy, czy choćby zwykłej alokacji na stosie.
Ten osobliwy idiom otrzymał jednak mniej lub bardziej oficjalnie status deprecated już w roku 1989, wraz z drugim wydaniem kompilatora Cfront, w którym dodano placement new, oraz przeciążanie new/delete. Pod koniec lat dziewięćdziesiątych kompilatory przestały w ogóle pozwalać na jego używanie.
