57

次と同等のものは何ですか:

std::vector<Foo*> vec;
vec.push_back(NULL);

を扱うときboost::shared_ptr?以下のコードですか?

std::vector< boost::shared_ptr<Foo> > vec;
vec.push_back(boost::shared_ptr<Foo>());

注: 私はそのようなオブジェクトの多くを押し戻す可能性があります。nullPtrどこかでグローバル静的オブジェクトを宣言する必要がありますか? そうすれば、そのうちの 1 つだけを構築する必要があります。

boost::shared_ptr<Foo> nullPtr;
4

6 に答える 6

9

nullptrC++0x では、単純に からに変換できますstd::shared_ptr

std::vector< boost::shared_ptr<Foo> > vec;
vec.push_back(nullptr);
于 2011-09-25T08:01:34.730 に答える
1

これは、少し単純でうまく機能すると思うものです

typedef(それはあなたの友達であることを覚えておいてください):

#include    <cstdlib>
#include    <vector>
#include    <iostream>
#include    <boost/shared_ptr.hpp>

typedef boost::shared_ptr< std::vector<char> > CharVecHandle;

inline CharVecHandle newCharVec(std::vector<char>::size_type size) {
    return CharVecHandle(new std::vector<char>(size));
}

inline CharVecHandle newCharVec(void) {
    return CharVecHandle();
}

int main ( void )
{
    CharVecHandle cvh = newCharVec();

    if (cvh == NULL) 
        std::cout << "It's NULL" << std::endl;
    else 
        std::cout << "It's not NULL" << std::endl;

    std::vector< CharVecHandle > cvh_vec;

    cvh_vec.push_back(newCharVec(64));
    cvh_vec.push_back(newCharVec());

    // or call the NULL constructor directly
    cvh_vec.push_back(CharVecHandle());

    return EXIT_SUCCESS;
}
于 2010-06-30T10:23:24.267 に答える
0

はい、グローバル静的ヌル ポインターを宣言します。

于 2009-03-07T03:12:28.940 に答える