2010-02-02 22 views
0

我有一些代碼,創建一個同步的隊列,我在一個數據收集類用來報告它的數據。它創建隊列的方法被踢了一個警告:這是否真的返回本地地址?

Queue^% DataGatherer::AddOutputQueue() 
{ 
    Queue^ outputQueue = Queue::Synchronized(gcnew Queue); 
    AddOutputQueue(outputQueue); 
    return outputQueue; 
} 

1> \ DataGatherer.cpp(21):警告C4172:返回局部變量的地址或臨時

這是一個警告我應該擔心的還是我的安全在這種情況下,它只是編譯器弄不清Queue::Synchronized返回Queue^?該代碼似乎運行正常,但警告讓我緊張;-)

回答

0

Queue^%表示通過引用傳遞的句柄。然而,func內部的句柄是一個局部變量,不能通過引用傳遞,因爲func完成時它可能被破壞。從返回類型中刪除%,你很好。

編輯:這並不意味着你的代碼似乎工作。它可以在任何時候停止這樣做。

+0

任何想法,我怎麼能得到函數返回這兩個DataGatherer類和調用者可以使用一個參考? 我同意有關的事實可能並不總是工作點;這是我問這個問題的最主要原因:-) – 2010-02-02 12:37:45

+0

要返回一個引用,你需要創建堆中引用的對象而不是堆棧。我不明白爲什麼你應該這樣做,但是在你的代碼中,Queue ^是一種以某種方式作爲參考的句柄。 – user231967 2010-02-02 13:09:04

+0

糾正我,如果我錯了,但不是什麼'gcnew Queue'呢? AFAIU syncronized位只是封裝了底層類以使其線程安全。至少,這是我的意圖...... – 2010-02-02 13:12:21

相關問題