Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

shared pointerについて #236

Open
yurikadoi opened this issue Dec 20, 2015 · 1 comment
Open

shared pointerについて #236

yurikadoi opened this issue Dec 20, 2015 · 1 comment

Comments

@yurikadoi
Copy link

@k-okada

include <boost/shared_ptr.hpp>をインクルードして

typedef boost::shared_ptr SharedPtr;
typedef vector* SharedPtrVec;

とすると

mech-user@test1-pc:~/2015winter/2015-soft3/20151202/src/enshu_20151202/src$ g++ -o GCTest GCTest.cpp -lpthread
In file included from /usr/include/boost/shared_ptr.hpp:17:0,
                 from GCTest.cpp:8:
/usr/include/boost/smart_ptr/shared_ptr.hpp: In instantiation of ‘boost::shared_ptr<T>::shared_ptr(Y*) [with Y = std::vector<int>; T = int]’:
GCTest.cpp:67:49:   required from here
/usr/include/boost/smart_ptr/shared_ptr.hpp:352:47: error: cannot convert ‘std::vector<int>*’ to ‘boost::shared_ptr<int>::element_type* {aka int*}’ in initialization
     explicit shared_ptr( Y * p ): px( p ), pn() // Y must be complete

というエラーが出ます

http://www.kmonos.net/alang/boost/classes/shared_ptr.html
このサイトを参照したのですが、stdとboostの関係がよくわかりません。
教えていただけないでしょうか?

土井

@k-okada
Copy link
Owner

k-okada commented Dec 22, 2015

https://github.com/k-okada/2015-soft3/blob/master/20151202/src/enshu_20151202/src/GCTest.cpp#L42
のあたりで,

#if 0
typedef vector<int> Elem;
typedef vector<int>* ElemPtr;
typedef vector<ElemPtr>* ElemPtrVec;
#else
#include <boost/shared_ptr.hpp>
typedef vector<int> Elem;
typedef boost::shared_ptr<vector<int> > ElemPtr;
typedef boost::shared_ptr<vector<ElemPtr> > ElemPtrVec;
#endif

とするとうまくいくと思います.

typedef boost::shared_ptr SharedPtr;
typedef vector* SharedPtrVec;

はtypedef(https://ja.wikipedia.org/wiki/Typedef)しているところで,上の僕が書いたものもtypedefですが,このGCTest.cppは例えば,https://github.com/k-okada/2015-soft3/blob/master/20151202/src/enshu_20151202/src/GCTest.cpp#L55

      new vector<ElemPtr>();

とありますが,これを

new vector<vector<int>* >();

と解釈するか

new boost::shared_ptr<vector<int> >()

と解釈するか,という切り替えになっています.

stdとboostですが,ぞれぞれ名前空間です.stdはC++の標準ライブラリで,boostは
実験的なライブラリ(https://ja.wikipedia.org/wiki/Boost)ですが,最近はどんどん
C++の標準になっていて,もうそろそろ一般的にstd::のなかでshared_ptrが使えるように
なりつつあります.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants