5

私は問題に直面していて、正しい解決策が何であるかを決定することができません。

説明のためのコード例は次のとおりです。

#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));

}

const A1&, const A2&,...問題は、make_sharedが文書化されているように引数を取得してTestClassコンストラクターに渡すため、shared_ptrインスタンスを作成できないことです。

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

私はそれをだまして参照boost::shared(new ...)用のコンストラクターを書き直すことができconstますが、それは正しい解決策のようには思えません。

前もって感謝します!

4

1 に答える 1

11

boost::ref引数をラップするために使用できます。つまり、次のようになります。

ptr = boost::make_shared< TestClass >( boost::ref( c ), c );
于 2012-07-31T14:35:55.210 に答える