Tôi muốn tạo một thùng chứa quản lý các đối tượng lớn thực hiện các bản sao sâu trên bản sao xây dựng và gán bản sao.Các thành viên di chuyển được tạo mặc định làm gì?
template <class TBigObject>
class Container : public std::vector< std::shared_ptr<TBigObject> >
{
public:
Container(int nToAllocate){ /* fill with default constructed TBigObjects */ }
Container(const Container& other){ /* deep copy */ }
Container(Container&&) = default;
Container& operator = (const Container& population){ /* deep copy */ }
Container& operator = (Container&&) = default;
};
Tôi muốn biết những gì làm defaulted:
Container(Container&&) = default;
Container& operator = (Container&&) = default;
thành viên thực sự làm.
Nếu tôi gọi:
Container<int> makeContainer()
{
...
}
và thiết lập breakpoint gỡ lỗi tại địa chỉ:
Container<int> moveAssigned;
moveAssigned = makeContainer(); // EDIT corrected thanks to Andy Prowl
Container<int> moveConstructed(makeContainer());
và bên trong constructor sao chép và toán tử gán, trình gỡ lỗi nhảy qua những breakpoint. Vì vậy, có vẻ như các thành viên di chuyển mặc định thực sự không thực hiện các bản sao sâu và di chuyển tất cả các subobject.
Hành vi này có được đảm bảo theo tiêu chuẩn không? Các thành viên di chuyển mặc định có hoạt động trực giác và di chuyển tất cả các subobject không?
Bạn không được kế thừa từ các loại tiêu chuẩn (trừ khi được phép rõ ràng). – bitmask
@bitmask Nhưng tôi không muốn có hành vi đa hình hoặc bất kỳ chức năng phức tạp nào. Tôi chỉ muốn thêm chức năng sao chép sâu. Có cách nào mà điều này có thể khiến tôi trở nên tồi tệ hơn không? Bạn có một số tài nguyên về vấn đề này không? –
Tôi đoán, trong trường hợp của tôi, câu hỏi này http://stackoverflow.com/questions/4353203/thou-shalt-not-inherit-from-stdvector áp dụng –