Từ cplusplus.com:C++ copy constructor với các thành viên shared_ptr
Hiếm khi bạn sẽ đi qua một lớp học mà không chứa con trỏ nguyên chưa constructor sao chép mặc định là chưa đủ. Ví dụ về số này là khi bạn có đối tượng được tính tham chiếu. boost :: shared_ptr <> là ví dụ.
Ai đó có thể giải thích về điều này? Nếu chúng tôi có một lớp học có chứa một boost::shared_ptr
, sẽ không có được bản sao xây dựng khi lớp được sao chép xây dựng - và do đó sẽ không phải là nhà xây dựng shared_ptr
làm điều đúng và tăng số lượng tài liệu tham khảo? Các mã sau đây, ví dụ, bản sao Inner
đúng - tại sao không làm việc này cho shared_ptr
:
#include <iostream>
using namespace std;
class Inner
{
public:
Inner() { cout << "inner default constructed" << endl;}
Inner(const Inner& other) { cout << "inner properly copied" << endl;}
};
class Outer
{
Inner i;
};
int main() { Outer o; Outer p(o); return 0;}
Có thể bạn đã không bị vấp phải bởi các âm bản kép bị thiếu mà không có trong tuyên bố đó? –
Quên nó đi, nó chỉ là bollocks. Giả sử nó không đề cập đến shared_ptr. Tôi đoán đây là một lý do khác khiến cplusplus.com bị thu hồi. –
Vì vậy, để đặt câu hỏi hay hơn thì. Khi mọi người nói "hàm tạo bản sao mặc định thực hiện bản sao nông", điều đó có nghĩa là "nó gọi các nhà xây dựng sao chép của tất cả các thành viên lần lượt" hoặc "nó chỉ thực hiện memcpy() trên cá thể lớp" –