Dalam C ++ tradisional, meneruskan nilai ke fungsi dan metode lambat untuk objek besar, dan umumnya disukai. Alih-alih, programmer C ++ cenderung meneruskan referensi, yang lebih cepat, tetapi yang memperkenalkan segala macam pertanyaan rumit seputar kepemilikan dan terutama seputar manajemen memori (jika objek dialokasikan dialokasikan)
Sekarang, di C ++ 11, kami memiliki referensi nilai dan memindahkan konstruktor, yang berarti bahwa mungkin untuk mengimplementasikan objek besar (seperti std::vector
) yang murah untuk melewati nilai ke dalam dan keluar dari suatu fungsi.
Jadi, apakah ini berarti bahwa standarnya harus lewat nilai untuk contoh jenis seperti std::vector
dan std::string
? Bagaimana dengan objek kustom? Apa praktik terbaik yang baru?
const std::string&
dan bukan salinan. Utas pertama kemudian keluar ...
pass by reference ... which introduces all sorts of complicated questions around ownership and especially around memory management (in the event that the object is heap-allocated)
. Saya tidak mengerti bagaimana rumit atau bermasalah untuk kepemilikan? Mungkin saya melewatkan sesuatu?