May 24, 2018

Merhaba,

Bugün izlediğim bir videoda kod optimizasyonu için "Placement new operator" kullanılması gerektiğinden behsediliyordu. Bu "Placement new operator" tam olarak nedir ? Bildiğimiz new operatoründen den farkı farkı nedir ?

İyi Çalışmalar.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

May 24, 2018

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. ]