class Example
{
boost::shared_ptr<FilterProvider> filterProvider;
public:
void RegisterFilter(const boost::shared_ptr<FilterProvider>& toRegister)
{
filterProvider = toRegister;
}
const boost::shared_ptr<const FilterProvider>& GetFilter() const
{
return filterProvider; // Compiler reports "Returning address of local
// variable or temporary"
}
};
我在这里看不到关于 filterProvider
的本地或临时内容;我返回的是类的成员变量,而不是临时变量。 (如果我实际上返回了一个局部变量或类似的东西,警告就有意义了)
具体的警告是:
warning C4172: returning address of local variable or temporary.
最佳答案
你的共享指针声明为类型
boost::shared_ptr<FilterProvider>
你回来了
boost::shared_ptr<const FilterProvider>
通过常量引用。看到区别了吗?
类型不一样,但前者可以转换为后者,编译器调用转换。转换的结果不是左值,而是一个临时对象,这意味着您将返回一个绑定(bind)到临时对象的 const 引用。这是合法的初始化方式,但是临时对象将在函数返回之前被销毁。因此在调用代码中引用将无效,这是编译器警告您的内容。
关于c++ - 为什么将 shared_ptr<T> 作为 shared_ptr<const T> 返回会导致 "returning address of temporary"警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3267541/