问题遇到的现象和发生背景
有一个简单的问题想要问一下各位。
用代码块功能插入代码,请勿粘贴截图
WeldRecipeSC* ActiveRecipeSC1 = WeldRecipeSC::GetWeldRecipeSC().get();
WeldRecipeSC* ActiveRecipeSC2 = WeldRecipeSC::GetWeldRecipeSC().get();
cout << ActiveRecipeSC1 << endl;
cout << ActiveRecipeSC2 << endl;
ActiveRecipeSC1 ->m_RecipeID = 1;
ActiveRecipeSC2 ->m_RecipeID = 2;
cout << ActiveRecipeSC1->m_RecipeID << endl;
cout << ActiveRecipeSC2->m_RecipeID<< endl;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
std::shared_ptr<WeldRecipeSC> RecipeSC3 = WeldRecipeSC::GetWeldRecipeSC();
std::shared_ptr<WeldRecipeSC> RecipeSC4 = WeldRecipeSC::GetWeldRecipeSC();
cout << RecipeSC3 << endl;
cout << RecipeSC4 << endl;
cout << RecipeSC3.get() << endl;
cout << RecipeSC4.get() << endl;
RecipeSC3.get()->m_RecipeID = 1;
RecipeSC4.get()->m_RecipeID = 2;
cout << RecipeSC3.get()->m_RecipeID << endl;
cout << RecipeSC4.get()->m_RecipeID << endl;
/////////////////////////////////////////////////////////GetWeldRecipeSC()//////////////////////////////////////////////////////////////
std::shared_ptr<WeldRecipeSC> WeldRecipeSC::GetWeldRecipeSC()
{
std::shared_ptr<WeldRecipeSC> ptrWeldRecipeSC = nullptr;
ptrWeldRecipeSC = std::make_shared<A>();//A是WeldRecipeSC的子类
return ptrWeldRecipeSC;
}
运行结果及报错内容
第一段代码打印出来的地址是相同的,当改变了ActiveRecipeSC2 ->m_RecipeID,那么ActiveRecipeSC1 ->m_RecipeID也就会被改变,而第二段代码RecipeSC3 和RecipeSC4 地址不同, RecipeSC3.get()和RecipeSC4.get()地址也不同,所以m_RecipeID 也就分别各自是各自的,为什么会出现这种问题呢?还请牛人解释一下。