共享指针作为命名空间中的变量:确保没有意外行为


class A 
{
public:
A(const std::shared_ptr<B> params_);
private:
const std::shared_ptr<B> params;
void fun1();
};
A::A(const std::shared_ptr<B> params_)
:
params(params_)
{}
void A::fun1()
{
calc::fun2(params);
}
namespace calc
{
std::shared_ptr<B> params;
void fun2(const std::shared_ptr<B> & params_)
{
calc::params = params_;
//...
}
}
int main()
{
//create instance of A and call calc::fun2()
}

在上面的代码中,类A持有一个指向对象b的指针。命名空间calc也需要访问对象2的数据。如果我们考虑悬空指针/引用,上面的代码安全吗?我目前正在调试一个更大的程序,并希望确保上述代码不会导致任何形式的未定义行为/内存泄漏。

在给出的代码中,没有明显的悬空引用。然而,它提供的上下文很少。

如果B包含到a的shared_ptr,这可能(取决于使用)创建一个循环依赖。

最新更新