c++ auto_ptr和shared_ptr从vc++ 10到vc++ 12的变化
C++ auto_ptr and shared_ptr changes from VC++10 to VC++12
我正致力于将Visual Studio和c++ 10的代码库更新到VS/c++ 12
我遇到了一个关于shared_ptr和auto_ptr的棘手问题。
原始c++ 10中的代码为
void CommandLoader::RegisterCommand(std::auto_ptr<ILoadableCommand> cmd)
{
assert(cmd.get() != NULL);
m_pImpl->m_registered.push_back(shared_ptr<ILoadableCommand>(cmd));
}
编译错误是:
error C2440: '<function-style-cast>' : cannot convert from std::auto_ptr<ILoadableCommand>' to 'std::shared_ptr<ILoadableCommand>'
在编辑器中,它会报错
Error: no instance of constructor"std::shared_ptr<_Ty> matches the argument list.
我的猜测是auto_ptr不再被接受为shared_ptr的构造函数的参数,但http://msdn.microsoft.com/en-us/library/bb981959.aspx另有说明。
我有点不知所措,所以任何帮助都会很好!
总之:不要使用auto_ptr。它基本上是坏的。使用std::unique_ptr代替。
你使用auto_ptr的方式也很奇怪:
void CommandLoader::RegisterCommand(std::auto_ptr<ILoadableCommand> cmd)
这意味着每次调用这个函数时,它都会创建一个新的auto_ptr,该auto_ptr获取缓冲区的所有权。然后你把它的所有权给一个shared_ptr。
这听起来像是你应该给函数一个原始指针,或者至少接受一个引用的情况:
void CommandLoader::RegisterCommand(std::unique_ptr<ILoadableCommand>& cmd)
相关文章:
- 参考资源文件VC++中的$(SolutionDir)
- VC++本机单元测试,找不到调试符号
- CLANG 编译器 说:变量"PTR"可能未初始化
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 将 ptr 传递给 ptr 到 A 作为参数传递给 A 的函数是不好的做法吗?
- 为共享 ptr 向量实现复制 c'tor?
- 字符和整数中 **(ptr+1) 的值差异
- C++:在不中断共享的情况下通过引用传递共享 PTR?
- 在这里,当我们比较 if(vc[i]==vc1[i]) 时,它是向量数组. 实际上比较的值是多少,
- VS2015 中的 VC++ 目录
- VS2015/VC++ 在新类模板中禁用默认 #include "stdafx.h"
- 如何将派生类从基 ptr 分配给 nlohmann::json
- 引用 std::shared:ptr 以避免引用计数
- 如何解释 #if/#else 位域?(VC++菜鸟)
- 双线程应用比单线程应用慢 C++ (VC++ 2010 Express).如何解决?
- 为什么我不能在不进行任何转换的情况下将浮点数放入任何类型的 ptr 中?
- 在调用函数时,ptr** 和 ptr*& 之间是否有区别,或者首选C++?
- 使用线程 C# 中的 VC++ 6.0 COM DLL
- 另一种类型的智能ptr,比如具有弱refs的unique_ptr
- 尝试打印出 *ptr++ 的值,以了解它是如何工作的