| |
| Posted by Ali Çehreli (acehreli) in reply to hsencan | PermalinkReply |
|
Ali Çehreli (acehreli)
Posted in reply to hsencan
| new iki şey yapar:
- Bellek ayırır
- Orada nesne kurar
delete iki şey yapar:
- Oradaki nesneyi sonlandırır
- Belleği geri verir
Bellek ayırmak ve geri vermek yavaş işlemler olduklarından nesneyi mevcut bir yerde oluşturmak isteyebiliriz. Bu durumda, yukarıdaki adımların bellekle ilgili olanları fazla geldiğinden new veya delete yerine placement new ve placement delete kullanılır. (placement delete diye özel bir şey yok çünkü "buradaki nesneyi sonlandır" demeye yarayan söz dizimi, Foo türündeki nesne için 'nesne.~Foo()''dur.
Yani, placement new gösterilen yerde nesne kurar.
#include <iostream>
#include <assert.h>
using namespace std;
struct Foo {
int i;
Foo(int i_) {
cout << this << " adresinde nesne kuruyorum\n";
i = i_;
}
~Foo() {
cout << this << " adresindeki nesneyi sonlandiriyorum\n";
}
};
int main() {
int yer[1000];
cout << "Elimdeki bellegin adresi: " << yer << '\n';
auto nesne = new (yer) Foo(42);
assert (nesne->i == 42);
nesne->~Foo();
}
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]
|