2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

C++相談室 part165

198 :デフォルトの名無しさん :2024/01/29(月) 21:21:12.23 ID:eAAuxXw40.net
>>189 c++
https://ideone.com/p3li2Y
https://ideone.com/oYzkxh を元に若干の整理を行った

・他の人と同様shared_ptrを削除
 値で持てるところは単に値で持つほうがC++っぽいと思う
 ただ「Entry を値で持つのはいやだなあ」とのことなので部分的に残してる
 Javaの参照型変数をshared_ptrに置き換えようとして困るのは
 size_t File::accept(std::shared_ptr<Visitor> v) { return v->visit(std::make_shared<File>(this)); }
 ここがJavaだと単にvisit(this)で済むからスッキリするんだけど
 しかもこれmake_shared(this)だと多重開放するよね??

>>189 c++
https://ideone.com/2uUpwH
https://ideone.com/p3li2Y を元に若干の整理を行った

・make_shared<File>(this)の多重開放?を修正
 std::enable_shared_from_thisを使ってJavaの参照型変数っぽい使用感を得た。

・struct this_is_private {};
 これは単にコンストラクタを実質的にprivateにするためだけに使ってる
 https://en.cppreference.com/w/cpp/memory/enable_shared_from_this
 https://stackoverflow.com/questions/8147027/how-do-i-call-stdmake-shared-on-a-class-with-only-protected-or-private-const
 このへん参照されたし

123 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :

read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★