std::shared_ptr & boost::shared_ptr 差异
std::shared_ptr & boost::shared_ptr difference
我有以下代码:
// interface.h
#ifndef INTERFACE_H
#define INTERFACE_H
#include <memory>
class IInterface {
public:
virtual ~IInterface() = 0;
virtual void doSomething() = 0;
};
inline IInterface::~IInterface() {}
typedef std::shared_ptr< IInterface > IIntPtr;
IIntPtr makeInterface();
#endif // INTERFACE_H
// impl.cpp
#include "interface.h"
class Interface : public IInterface { public:
Interface() {}
~Interface() {}
void doSomething() {} };
IIntPtr makeInterface() { return IIntPtr( new Interface() ); }
// main.cpp
#include "interface.h"
using namespace std;
int main()
{
auto p = makeInterface();
p->doSomething();
}
现在:如果我使用typedef std::shared_ptr< IInterface > IIntPtr;
都很好,但如果我使用typedef boost::shared_ptr< IInterface > IIntPtr;
,我有一些编译器错误:
- 编译错误C2027:类型不能使用,直到它被定义。要解决此错误,请确保在引用类型之前已完全定义该类型。
- 编译错误C2079: 'identifier'使用未定义的类/结构/联合'name'
- 编译错误C2440:编译器不能从'type1'转换为'type2'.
我正在使用msvc10,但代码必须与msvc9.0编译,所以我必须使用Boos。SmartPtr
我错过了什么吗?
OP在评论中回答了自己的问题:他在尝试Boost版本时忘记了#include <boost/shared_ptr.hpp>
。
相关文章:
- CLANG 编译器 说:变量"PTR"可能未初始化
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 将 ptr 传递给 ptr 到 A 作为参数传递给 A 的函数是不好的做法吗?
- 为共享 ptr 向量实现复制 c'tor?
- 字符和整数中 **(ptr+1) 的值差异
- C++:在不中断共享的情况下通过引用传递共享 PTR?
- 如何将派生类从基 ptr 分配给 nlohmann::json
- 引用 std::shared:ptr 以避免引用计数
- 为什么我不能在不进行任何转换的情况下将浮点数放入任何类型的 ptr 中?
- 在调用函数时,ptr** 和 ptr*& 之间是否有区别,或者首选C++?
- 另一种类型的智能ptr,比如具有弱refs的unique_ptr
- 尝试打印出 *ptr++ 的值,以了解它是如何工作的
- 如何控制共享 ptr 引用计数?
- dopen():不以 root 身份运行时"failed to map segment from shared object"
- C++中的指针否定 (!ptr == NULL)
- 从const ptr*转换为ptr*时出现问题
- 无法使用 libtool 将 -shared 参数传递给 g++
- boost::shared_ptr和std::shared-ptr的同居
- 我可以用std::shared_ptr而不是boost::shared-ptr构建boost库吗
- shared-ptr-C++shared_ptr与unique_ptr用于资源管理