这些shared_ptr实例之间的区别?

时间:2014-03-03 17:47:23

标签: c++ templates shared-ptr

我对模板没有那么多经验,而且我在团队的代码中发现了一些令我困惑的用法。

假设我有一个基类,其中包含以下两个用于shared_ptr的typedef:

class Foo
{
     virtual ~Foo();
     virtual void bar() = 0;
};

typedef boost::shared_ptr<Foo> FooPtr1;         //this is what i'm used to seeing
typedef boost::shared_ptr<class Foo> FooPtr2;   //this is in our codebase

这些typedef之间有什么区别吗?它与派生类的使用有关吗?

1 个答案:

答案 0 :(得分:5)

没有区别。

支持语法class Foo以与struct Foo保持一致,而{C}兼容性又支持struct。在C中,S本身不是一个类型:对应于名为struct S的结构的类型typedef,通常通过{{1}命名}}。在C ++中,不需要typedef,语法基本上无关紧要。我发现为模板实例化引入“内联”标记类型很有用,例如X< whatever, struct X_tag >,其中标记类型是不完整类型。但就是这样。