如何克服makeshared的不确定性

how to overcome make_shared constness

本文关键字:makeshared 不确定性 克服 何克服      更新时间:2023-10-16

我遇到了一个问题,无法决定什么是正确的解决方案。

以下是示例代码:

#include <boost/make_shared.hpp>
#include <boost/shared_ptr.hpp>
class TestClass{
    public:
        int a;
        TestClass(int& a,int b){};
    private:
        TestClass();
        TestClass(const TestClass& rhs);
};
int main(){
    int c=4;
    boost::shared_ptr<TestClass> ptr;
//NOTE:two step initialization of shared ptr    
//     ptr=boost::make_shared<TestClass>(c,c);// <--- Here is the problem
    ptr=boost::shared_ptr<TestClass>(new TestClass(c,c));
}

问题是我无法创建shared_ptr实例,因为make_shared获取并将参数作为const A1&, const A2&,...传递给TestClass构造函数,如文档所示:

template<typename T, typename Arg1, typename Arg2 >
    shared_ptr<T> make_shared( Arg1 const & arg1, Arg2 const & arg2 );

我可以用boost::shared(new ...)来欺骗它,或者重写const引用的构造函数,但这似乎不是正确的解决方案。

提前谢谢!

您可以使用boost::ref来包装参数,即:

ptr = boost::make_shared< TestClass >( boost::ref( c ), c );