tr1 memory 中的智能指针

tr1/memory 中带了一个 shared_ptr 的智能指针,也有配套的 weak_ptr,但是没有 scoped_ptr,不过起码可以不用等到 c++11 的编译器了

#include <tr1/memory>
#include <stdio.h>

class CTest {
    public:
        CTest() {
            printf("CTest\n");
        }
        ~CTest() {
            printf("~CTest\n");
        }
};

std::tr1::shared_ptr<CTest> GetSharedTest() {
    printf("in get\n");
    std::tr1::shared_ptr<CTest> pTest(new CTest());
    printf("leaving get\n");
    return pTest;
}


int main() {
    std::tr1::shared_ptr<CTest> pTest = GetSharedTest();
    return 0;
}

输出

in get
CTest
leaving get
~CTest

—————————————-

2014-3-17 11:11:26 update 常说要 RAII,来看看文件操作如何 RAII

#include <stdio.h>
#include <string>
#include <assert.h>
#include <tr1/memory>

class CFile {
public:
    FILE* fp;
    CFile(const char* pPathToFile, const char* pMod) {
        printf("opening %s with mod %s\n", pPathToFile, pMod);
        fp = fopen(pPathToFile, pMod);
    }
    ~CFile() {
        if (fp) {
            printf("closing file\n");
            fclose(fp);
        }
    }
private:
    CFile(CFile const &);
    CFile& operator=(CFile const &);
};
typedef std::tr1::shared_ptr<CFile> FileSharedPtr;

int main() {
    FileSharedPtr pFile(new CFile("test.txt", "w"));
    assert(pFile->fp != NULL);
    std::string strGreeting("hello");
    fwrite(strGreeting.c_str(), strGreeting.length(), 1, pFile->fp);
    return 0;
}

Leave a Reply

Your email address will not be published. Required fields are marked *