来自const指针的共享指针

时间:2014-04-07 13:06:56

标签: c++ c++11

假设我有一个返回

的函数
const MyType*

我可以将结果捕获到shared_ptr中吗?怎么样?

3 个答案:

答案 0 :(得分:1)

您可以使用default constructor来执行此操作。顺便说一下有一个问题:小心const T - T指针共享!

#include <iostream>
#include <memory>
using namespace std;

class MyType {
    public:
};

const MyType* fun() {
    return new MyType();
}

int main() {

    {
        shared_ptr<const MyType> new_ptr(fun());

        // Use your pointer..

        shared_ptr<MyType> other_ptr(new MyType());
        shared_ptr<const MyType> other_ptr2 = other_ptr; // T to const T, allowed

        shared_ptr<MyType> new_ptr2 = new_ptr; // const T to T - NOT ALLOWED
    }

    return 0;
}

http://ideone.com/OOPdLu

答案 1 :(得分:0)

shared_ptr<MyType const>可以解决问题,但在走这条路之前,我会非常,非常肯定我可以;如果返回的值未使用new分配,或者已经位于shared_ptr中。

答案 2 :(得分:0)

shared_ptr可以接受const类型作为其类型。

std::shared_ptr<const MyType>

所以你可以使用它:

std::shared_ptr<const MyType> pResult(SomeFunction());

然而,假设函数返回的值为new,并且函数调用者负责返回指针。