Tôi có một lớp tạo một đối tượng bên trong một phương thức công khai. Đối tượng là riêng tư và không hiển thị cho người dùng của lớp. Phương pháp này sau đó gọi khác tin phương pháp bên trong cùng lớp và vượt qua các đối tượng được tạo ra như một tham số:Truyền con trỏ thông minh làm đối số bên trong một lớp: scoped_ptr hoặc shared_ptr?
class Foo {
...
};
class A {
private:
typedef scoped_ptr<Foo> FooPtr;
void privateMethod1(FooPtr fooObj);
public:
void showSomethingOnTheScreen() {
FooPtr fooObj(new Foo);
privateMethod1(fooObj);
};
};
Tôi tin rằng con trỏ thông minh đúng trong trường hợp này sẽ là một scoped_ptr, tuy nhiên, tôi không thể làm được vì scoped_ptr điều này làm cho lớp không copyable nếu được sử dụng theo cách đó, vì vậy tôi nên làm cho các phương pháp như thế này:
void privateMethod1(FooPtr& fooObj);
privateMethod1 không lưu trữ các đối tượng, không phải giữ tài liệu tham khảo của nó. Chỉ truy xuất dữ liệu từ lớp Foo.
Cách chính xác có thể không sử dụng con trỏ thông minh và phân bổ đối tượng trong ngăn xếp, nhưng điều đó là không thể vì nó sử dụng thư viện không cho phép đối tượng trên ngăn xếp, chúng phải nằm trên Heap .
Sau khi tất cả, tôi vẫn còn bối rối về việc sử dụng thực tế của scoped_ptr.
Tôi tò mò về thư viện 'không cho phép các đối tượng trên ngăn xếp'. Các đối tượng được phân bổ bên trong thư viện trên heap với một nhà máy? Thư viện có sở hữu con trỏ và xóa nó không?Lý do tại sao bạn không thể sử dụng các đối tượng được cấp phát stack là gì? –