Khi không có mẫu variadic (vẫn còn!) Trong Visual Studio 2010/2011, một hàm tạo cần nhiều tham số có thể có vấn đề. Ví dụ: nội dung sau sẽ không biên dịch:std :: make_shared số tham số trong hàm tạo
MyMaterials.push_back(std::make_shared<Material>(MyFacade,
name,
ambient,
diffuse,
specular,
emissive,
opacity,
shininess,
shininessStrength,
reflectivity,
bumpScaling,
maps,
mapFlags));
, vì nó có 13 tham số và tôi nghĩ make_shared bị giới hạn từ arg0 đến arg9. Công việc rõ ràng xung quanh là hai phần xây dựng, nhưng tôi đã hy vọng để tránh điều này. Có khả năng nào khác ở đây, ngoài việc sử dụng mới thay vì make_shared?
Cảm ơn.
Ah. Tất nhiên. Điều đó có ý nghĩa hoàn hảo. – Robinson
Điều tốt là make_shared cũng sẽ sử dụng thói quen phân bổ một tối ưu khi tạo shared_ptr –
Xin lỗi - Tôi không thấy cách này tránh sao chép từ ngăn xếp cục bộ (nơi Material() đang được xây dựng) tới heap (nơi make_shared sẽ thực sự đặt nó). Trong trường hợp này, làm sao có thể tránh được bản sao? – Mordachai