c++ - 将 std::shared_ptr 与 protected 构造函数\析构函数一起使用

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

<分区>

Possible Duplicate:
How do I call ::std::make_shared on a class with only protected or private constructors?

我想创建一个指向类的共享指针,并有一个返回它的工厂方法,同时保护构造函数/析构函数。由于共享指针无法访问构造函数或析构函数,因此出现编译错误。

我正在使用 llvm 4.1,但我正在寻找一种可以独立于编译器的解决方案(除了公开构造函数\析构函数之外)。

这是一个代码示例:

class Foo
{
public:
    static std::shared_ptr<Foo> getSharedPointer()
    {
        return std::make_shared<Foo>();
    }

protected:
    Foo(int x){}
    ~Foo(){}

};

有什么想法吗?

最佳答案

只需自己分配指针而不是调用 make_shared:

static std::shared_ptr<Foo> getSharedPointer()
{
    return std::shared_ptr<Foo>(new Foo);
}

但是请注意,这需要公开析构函数。

关于c++ - 将 std::shared_ptr 与 protected 构造函数\析构函数一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12920609/

相关文章:

C++ 和 Sqlite3 : How to store date/time with milliseconds precision

c++ - BOOST_STATIC_ASSERT_MSG - 缺少错误信息

c++ - 解压缩 TIFF 数据打印随机字符

c++ - 使用 std::async 调用模板函数的正确方法是什么

c++ - 具有不同数量参数重载的函数模板特化

c++ - 套接字创建的 Shared_Ptr - 出了什么问题?

c++ - Windows 7 上的 DLL 重定向

C++11 g++ 奇怪(使用默认模板、lambda 和 remove_if)

c++ - 用于 boost shared_ptr 的自定义删除器

c++ - 从 int 到 shared_ptr 的隐式转换