Hãy xem xét các lớp:C++ 11 thông số tối ưu qua
#include <iostream>
#include <string>
class A
{
std::string test;
public:
A (std::string t) : test(std::move(t)) {}
A (const A & other) { *this = other; }
A (A && other) { *this = std::move(other); }
A & operator = (const A & other)
{
std::cerr<<"copying A"<<std::endl;
test = other.test;
return *this;
}
A & operator = (A && other)
{
std::cerr<<"move A"<<std::endl;
test = other.test;
return *this;
}
};
class B
{
A a;
public:
B (A && a) : a(std::move(a)) {}
B (A const & a) : a(a) {}
};
Khi tạo một B
, tôi luôn luôn có một con đường phía trước tối ưu cho A
, một động thái cho rvalues hoặc một bản sao cho lvalues.
Có thể đạt được kết quả tương tự với một hàm tạo không? Nó không phải là một vấn đề lớn trong trường hợp này, nhưng còn nhiều thông số thì sao? Tôi sẽ cần sự kết hợp của mọi sự xuất hiện có thể của các giá trị và giá trị trong danh sách tham số.
Điều này không giới hạn đối với các nhà xây dựng, mà còn áp dụng cho các tham số chức năng (ví dụ: người định cư).
Lưu ý: Câu hỏi này đúng về class B
; class A
chỉ tồn tại để hình dung cách thức thực hiện cuộc gọi sao chép/di chuyển.
Bạn nên đọc: http://stackoverflow.com/questions/8472208/under-what-conditions-should-i-be-thinking-about-implementing-a-move-constructor và http: // stackoverflow. com/questions/4782757/rule-of-three-trở thành-rule-of-five-with-c11 –
@JamesCuster: Tôi chỉ muốn kiểm tra số lần các nhà thầu/nhà khai thác tương ứng được gọi. – fscan