5 Eylül 2014 Cuma

Move Semantics

Move Semantics
Move semantics ile ilgili bilgilendirici bir yazı burada.

Move Constructor
Move constructor aşağıdaki gibi tanımlanır.
A(A&& other)
: _x(std::move(other._x))
{}
std::move  kullanılmazsa aşağıdaki kod copy constructor'ı çağırır.
int main()
{
  A a;
  A b = a;
  b.foo();
}
Move Constructor'ın çağırılması için std::move() metodunu kullanmak gerekir.

#include <utility>
int main()
{
  A a("a");
  A b = std::move(a);
  b.foo();
}
Move Constructor ve RValue
RValue'lar için önce  Move Constructor uygulanmaya çalışılır. Eğe tanımlı değilse Copy Constructor uygulanır.
Örnek:
NonMove foo() {
  return NonMove();
}

Pass By Value and Move Construct
Burada pass by value ve move construct işleminin primitif tipler için daha hızlı olduğu açıklanmış.
class A
{
  A(std::string str) : mStr(std::move(str)) {}
  std::string mStr;  
}

Lokal Değişkenin Move Edilmesi
Lokal değişkenler copy constructor çağırılmadan geçilmek istenirse aşağıdaki gibi yapılabilir. Böylece lvalue değişkenler rvalue haline getirilir.

object3 a(x);
object2 b(std::move(a));
object1 c(std::move(b));
return c;


Hiç yorum yok:

Yorum Gönder