Hi @hans. thanks!
Let's say I change to use c++ obj instead of pointer e.g: %type <PROG> PROG %type <ListExp> ListExp PROG : ListExp driver.store_ast( PROG($1) ); ListExp : Exp { $$ = ListExp(); $$.push_back($1)); } Exp : Exp "OR" Exp1 { $$ = Elor($1, $3) ; } using ListExp_PTR = std::unique_ptr<ListExp>; class PROG { public: // should I use obj here? // ListExp listexp_; // or pointer? ListExp_PTR listexp_; ... } My some dummy questions are: (1) when ListExp was returned up to PROG (e.g: PROG($1)), does it use copy constructor? or use move constructor if it existed? (2) should I use object ( ListExp) inside PROG class or a std::unique_ptr inside the PROG to save some copy ? In the latter case, how can I initial std::unique_ptr if the passed parameters if a obj? thanks min On Thu, Aug 18, 2016 at 11:45 AM, Hans Åberg <haber...@telia.com> wrote: > > > On 18 Aug 2016, at 16:03, Min Wang <mingew...@gmail.com> wrote: > > > So I should use > > > > %type <PROG> PROG > > > > instead of > > > > %type <PROG*> PROG > > > Thus I do not need %destructor at all? > > If you write a proper C++ type T with T::~T destructor, then %destructor > should not be used, nor explicit deallocation in the actions. > > -- http://www.comrite.com _______________________________________________ help-bison@gnu.org https://lists.gnu.org/mailman/listinfo/help-bison