Move Semantics
Move semantics ile ilgili bilgilendirici bir yazı burada.
Move Constructor
Move constructor aşağıdaki gibi tanımlanır.
RValue'lar için önce Move Constructor uygulanmaya çalışılır. Eğe tanımlı değilse Copy Constructor uygulanır.
Örnek:
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ış.
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.
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 RValueRValue'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