std :: shared_ptr& boost :: shared_ptr的区别

时间:2013-04-23 14:07:09

标签: c++ boost c++11 shared-ptr

我有以下代码:

// 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'使用未定义的class / struct / union'name'
  • 编译器错误C2440:编译器无法从'type1'转换为'type2'。

我正在使用msvc10,但代码必须使用msvc9.0编译,所以我必须使用Boos.SmartPtr

我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

OP在评论中回答了他自己的问题:他在尝试Boost版本时忘了#include <boost/shared_ptr.hpp>