雖然試圖找出一個問題,只發生在發佈版本,而不是在調試版本中,我注意到以下行爲(字符串將是無效的,不會指向任何東西,而int會沒事的)。我已經給下面的代碼這給打算什麼我通過在發佈版本中的行爲我不能理解
typedef boost::shared_ptr<MyClass> shared_cls
typedef std::deque<shared_cls> vector_def;
typedef boost::shared_ptr<vector_def> shared_vector_def;
typedef boost::unordered_map<int,shared_vector_def> inner_map_def;
typedef boost::shared_ptr<inner_map_def> shared_inner_map_def;
static boost::unordered_map<std::string,shared_inner_map_def> bcontainer;
shared_cls& SomeMethod(const std::string& symb,const int& no)
{
shared_inner_map_def tshare = bcontainer[symb];
shared_vector_def tmp = tshare->at(no);
shared_cls t = tmp->back();
return t
}
對象MyClass的是這樣的
class SomeClass
{
private:
int i;
std::string s;
void set_i(int rx)
{
i = rx;
}
int get_i()
{
return i;
}
void set_s(std::string rx)
{
s = rx;
}
std::string get_s()
{
return s;
}
}
現在,當我用上面的方法,如下面的代碼的想法
void main()
{
shared_cls r = SomeMethod("IBM",12);
//Here r does not have a valid string s
//However it does have a valid int i
}
現在我的問題是在上面main
當我打電話SomeMethod
r返回沒有一個有效的字符串s
。它具有我通過使用記錄器發現的混亂值。但s
的值在功能SomeMethod
中完全找到。我通過不通過引用返回共享指針來解決此問題。在這種情況下,它可以工作。爲什麼刪除參考使其工作
當你嘗試返回一個臨時對象的引用時,你應該從任何體面的編譯器得到一個大膽的警告! –
不是指向指向靜態容器中存在的對象的指針。 – MistyD
@MistyD,看起來你的發佈代碼不完整 –