Tôi đang cố gắng để vượt qua 'này' để các nhà xây dựng sử dụng std :: make_sharedC++ 11 Passing 'này' như paramenter cho std :: make_shared
Ví dụ:
// headers
class A
{
public:
std::shared_ptr<B> createB();
}
class B
{
private:
std::shared_ptr<A> a;
public:
B(std::shared_ptr<A>);
}
// source
std::shared_ptr<B> A::createB()
{
auto b = std::make_shared<B>(this); // Compiler error (VS11 Beta)
auto b = std::make_shared<B>(std::shared_ptr<A>(this)); // No compiler error, but doenst work
return b;
}
Tuy nhiên điều này không hoạt động đúng, bất kỳ đề xuất làm thế nào tôi có thể vượt qua chính xác điều này như một đối số?
Thanks a lot Andrew! – RdR
Điều quan trọng cần lưu ý là 'shared_from_this()' yêu cầu đối tượng hiện tại đã được quản lý trong một 'shared_ptr'. I E. 'int main() {A a; a.createB(); } 'là hành vi không xác định, trong khi' int main() {shared_ptr a (new A); a-> createB(); } 'là chính xác. –
@ DavidRodríguez-dribeas Tuyệt đối. Tôi đã cập nhật câu trả lời cho phù hợp. Cảm ơn. –