返回一个空的智能指针

时间:2015-05-26 07:59:30

标签: c++

我有一个看起来像这样的课程,

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值不为空。

1 个答案:

答案 0 :(得分:1)

我发现你的代码有些错误:

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

&#34; new Type&#34;表示您为Type(Type :: Type())调用默认构造函数,并且您没有在样本中编写它。尝试&#34;新类型(* this)&#34;使用自己的构造函数。 但要执行此操作,您需要将Type类更改为:

class Type
{
    A* aa;                       // Use a pointer

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

问题是它没有解决&#34;递归方面&#34;,根据你的需要,我会在Type类中使用静态引用...