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"
}
};
Run Code Online (Sandbox Code Playgroud)
我不知道filterProvider这里有什么地方或临时的; 我正在返回看起来像是类的成员变量的东西,而不是临时的.(如果我实际上返回了一个局部变量或类似的东西,警告会有意义)
具体警告是:
warning C4172: returning address of local variable or temporary.
Run Code Online (Sandbox Code Playgroud)
您的共享ptr是使用类型声明的
boost::shared_ptr<FilterProvider>
Run Code Online (Sandbox Code Playgroud)
你回来了
boost::shared_ptr<const FilterProvider>
Run Code Online (Sandbox Code Playgroud)
通过const引用.看到不同?
类型不一样,但前者可以转换为后者,编译器调用转换.转换的结果不是左值,而是临时对象,这意味着您将返回绑定到临时对象的const引用.这是合法的初始化,但临时将在函数返回之前销毁.所以在调用代码中引用将是无效的,这是编译器警告你的内容.
| 归档时间: |
|
| 查看次数: |
662 次 |
| 最近记录: |