我有一个看起来像这样的课程,
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
值不为空。
答案 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类中使用静态引用...