Multithreading 这真的是返回一个本地加法吗?

Multithreading 这真的是返回一个本地加法吗?,multithreading,c++-cli,queue,Multithreading,C++ Cli,Queue,我有一些代码创建了一个同步队列,我在数据收集类中使用它来报告数据。创建队列的方法正在引发警告: Queue^% DataGatherer::AddOutputQueue() { Queue^ outputQueue = Queue::Synchronized(gcnew Queue); AddOutputQueue(outputQueue); return outputQueue; } 1> .\DataGatherer.cpp(21):警告C4172:返回局部变量或临

我有一些代码创建了一个同步队列,我在数据收集类中使用它来报告数据。创建队列的方法正在引发警告:

Queue^% DataGatherer::AddOutputQueue()
{
    Queue^ outputQueue = Queue::Synchronized(gcnew Queue);
    AddOutputQueue(outputQueue);
    return outputQueue;
}
1> .\DataGatherer.cpp(21):警告C4172:返回局部变量或临时变量的地址


这是我应该担心的警告,还是在这种情况下我是安全的,只是编译器对
Queue::Synchronized
返回
Queue^
感到困惑?代码似乎运行正常,但警告让我感到紧张;-)

Queue^%
表示通过引用传递句柄。但是,func内部的句柄是一个局部变量,不能通过引用传递,因为当func完成时,它可能会被破坏。从返回类型中删除
%
,就可以了


编辑:这并不意味着你的代码似乎可以工作。它可以随时停止这样做。

知道如何让函数返回DataGatherer类和调用方都可以使用的引用吗?我同意这一点,即它可能并不总是有效的;这就是我问这个问题的主要原因:-)要返回引用,需要在堆上而不是堆栈上创建被引用的对象。我不明白你为什么要这样做,在你的代码队列中,^是一个句柄,在某种程度上是一个引用。如果我错了,请纠正我,但这不是
gcnew Queue
的作用吗?AFAIU的同步位只是包装底层类以使其线程安全。至少,这是我的意图…
gcnewqueue
在堆上创建一个对象,对吗<代码>队列^是堆栈上的一个对象。无法通过引用传回,因为它位于堆栈上。