gpt4 book ai didi

c++ - 我无法初始化 C 类的 shared_ptr

转载 作者:行者123 更新时间:2023-12-04 01:01:58 28 4
gpt4 key购买 nike

class B;
class C;

class B
{
public:
B() { cout<<"B created"<<endl; }
~B() { cout<<"B destroyed"<<endl; }

shared_ptr<C*> ptrc;
};

class C
{
public:
C() { cout<<"C created"<<endl; }
~C() { cout<<"C destroyed"<<endl; }
};

int main()
{
shared_ptr<B*> bb = make_shared<B*>(new B);
bb->ptrc = make_shared<C*>(new C);// this line gives error
}
error:
a.cpp: In function ‘int main()’:
a.cpp:133:9: error: request for member ‘ptrc’ in ‘*((std::__shared_ptr_access<B*, __gnu_cxx::_S_atomic, false, false>*)(& bb))->std::__shared_ptr_access<B*, __gnu_cxx::_S_atomic, false, false>::operator->()’, which is of pointer type ‘std::__shared_ptr_access<B*, __gnu_cxx::_S_atomic, false, false>::element_type’ {aka ‘B*’} (maybe you meant to use ‘->’ ?)
133 | bb->ptrc = make_shared<C*>(new C);

我创建了 2 个类 B 和 C。在 B 中,有一个指向 C 的 shared_ptr。在 main 中,我创建了一个 B 的 shared_ptr。从 B 的对象,即 bb,我无法初始化 C 的那个 shared_ptr。

最佳答案

bb 是指向指针 B*shared_ptr,即几乎指向指针的指针。您可以像这样取消引用它

(*bb)->ptrc = make_shared<C*>(new C);

但是,您的代码存在内存泄漏,new 创建的对象未被delete。使用智能指针的主要目的在这里丢失了。只是不要使用 shared_ptr 指向指针,而是直接指向 BC 类,例如

shared_ptr<B> bb = make_shared<B>(); // bb is a shared_ptr to B
bb->ptrc = make_shared<C>(); // declare ptrc as shared_ptr<C> too

关于c++ - 我无法初始化 C 类的 shared_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68029715/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com