2012年5月23日水曜日

C++を勉強中・・・ orz

std::shared_ptr使っているときにthisポインタを扱いたいときは
std::enable_shared_from_this<クラス名>を継承して,
shared_from_this()を使用して取得する・・・であっているのかな・・・.

#include <iostream>
#include <memory>

class Student : public std::enable_shared_from_this<Student>
{
public:
    Student(std::string name, int first_score, int second_score)
        : name_(name), first_score_(first_score),
          second_score_(second_score) {}
    ~Student() { std::cout << "delete " << name_ << std::endl; }

    void printScore() {
        std::shared_ptr<Student> ptr = shared_from_this();
        std::cout << name_ << " : "
                  << first_score_ + second_score_ << std::endl;
    }
    std::shared_ptr<Student> getSharedPointer() {
        // これだとやばい・・・
        // return  std::shared_ptr<Student>(this);
        return  shared_from_this();
    }
private:
    std::string name_;
    int first_score_, second_score_;
};

int main()
{
    auto student = std::make_shared<Student>("Miyanaga", 5200, 24000);
    auto it = student->getSharedPointer();

    it->printScore();
    sleep(1);

    return 0;
}

0 件のコメント:

コメントを投稿