返回一个空的智能指针

Returning an empty smart pointer

本文关键字:智能 指针 一个 返回      更新时间:2023-10-16

我有一个像这样的类,

class A
{
   std::shared_ptr<Type> ret;
public:
   A()
   {
     ret=std::shared_ptr<Type>(new Type);
   }
   std::shared_ptr<Type> GetTypeA(){return ret;}
   A (const A&a)
   {
     ....
     ret=a.ret;
   }
};
class Type
{
   A aa;   
public:
   Type(A*a):aa(*a){}
};

在客户端代码的某处,我像这样调用GetTypeA方法

void func(A*pA)
{
...
   std::shared_ptr<Type> spT=pA->GetTypeA();
...
}

调试显示,spT=empty后调用。但在pA内部,ret值不为空

我注意到你代码中的一些错误:

A()
{
   ret=std::shared_ptr<Type>(new Type);
}

"new Type"意味着您调用了Type的默认构造函数(Type::Type()),并且您没有在示例中编写它。尝试使用"new Type(*this)"来使用自己的构造函数。但要做到这一点,你需要改变你的类型类为:

class Type
{
    A* aa;                       // Use a pointer
public:
    Type::Type(A&a) :aa(&a){}    // Use references
};

问题是它没有解决"递归方面",根据您的需要,我会在Type类中使用对a的静态引用…