[過去ログ] C++相談室 part165 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
131: デフォルトの名無しさん (ワッチョイ 0644-M+UX) [sage] 2024/01/04(木) 23:21:36.86 ID:oZapr/U70(2/2) AAS
>>127
127(2): デフォルトの名無しさん (ワッチョイ e95f-pFp4) [sage] 2024/01/04(木) 21:53:05.60 ID:ACseOt7T0(2/2) AAS
>>124
こんな感じです?

struct base_ {
virtual base_* clone (void *p) = 0;
virtual ~base_() {};
};

template <typename F>
struct derived_ : base_ {
F f_;
derived_(F f) : f_{ std::move(f) } {}
base_* clone (void *p_buf){
return new(reinterpret_cast<derived_<F>*>(p_buf))(f_);
}
};

A(A& src) {
p_ = src.clone((void*)buf);
};
cloneの中ってplacement newでcopy constructorを呼ぼうとしてるんだよな?
いちおうあってるけどundefined behaviorまみれ
203
(1): ◆QZaw55cn4c (ワッチョイ 3555-LgJ8) [] 2024/02/03(土) 10:15:36.86 ID:21sfApha0(2/2) AAS
>>198
198(2): デフォルトの名無しさん (ワッチョイ bda8-xxv9) [sage] 2024/01/29(月) 21:21:12.23 ID:eAAuxXw40(1) AAS
>>189 c++
外部リンク:ideone.com
外部リンク:ideone.com を元に若干の整理を行った

・他の人と同様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++
外部リンク:ideone.com
外部リンク:ideone.com を元に若干の整理を行った

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

・struct this_is_private {};
 これは単にコンストラクタを実質的にprivateにするためだけに使ってる
 外部リンク:en.cppreference.com
 外部リンク:stackoverflow.com
 このへん参照されたし
>値で持てるところは単に値で持つほうがC++っぽいと思う
時代の流れを感じさせるお言葉です。なにせ K&R1 で育った世代なので(K&R1 では構造体の実体渡しはできず、かならずポインタで渡さなければならなかった)。
C++ においても、コピコンを働かせないために const & を多用する毎日です
256
(2): デフォルトの名無しさん (ワッチョイ eba6-IqbK) [sage] 2024/02/12(月) 15:42:15.86 ID:NdUIQhSh0(1) AAS
ファイル名に年月が使えないの困ります。
2024/02/11_データ.txt
とか
349: デフォルトの名無しさん (ワッチョイ fee5-FHn0) [sage] 2024/06/08(土) 01:03:51.86 ID:k3Jnk/Aj0(1) AAS
静的解析で文句言われる可能性あるからやめときな
頻発するならスニペット作ればいいだけ
そういう表面的なことにこだわる奴は三流
543: デフォルトの名無しさん (ワッチョイ b163-+nMC) [sage] 2024/11/09(土) 19:08:22.86 ID:djyKk80a0(1) AAS
昔std::vector<T>とかstd::stringを前のコンパイラでビルドしたDLLに渡したら以下略
やっぱコンパイラを混ぜるときはextern "C" な関数にプリミティブな型のみを渡すインターフェース設計にするパティーンが安牌
文字列とか渡したかったらあくまでchar[]にすべき……
574: デフォルトの名無しさん (ワッチョイ 4243-gDrC) [sage] 2024/11/20(水) 22:54:39.86 ID:g9sD9hG/0(1) AAS
アホみたいなカスの嘘です
776
(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ e932-exlI) [sage] 2025/03/22(土) 23:40:24.86 ID:nNEN9uWE0(3/3) AAS
>>775
775(1): デフォルトの名無しさん (ワッチョイ d963-lHAu) [sage] 2025/03/22(土) 22:39:33.53 ID:kbZO019Z0(3/4) AAS
>ところでテンプレートクラスじゃなくてクラステンプレートな!
なるほど……orz

コード例:
class Foo {
  friend std::unique_ptr<Foo>;
  static std::unique_ptr<Foo> m_pObj;
private:
  static Foo* createInstance() {
    if (m_pObj == NULL) { m_pObj = std::unique_ptr<Foo>(new Foo()); } return m_pObj.get()j;
    // ↑ std::make_unique<Foo>()したらビルドエラー(使うには多分std::make_unique<Foo>()もfriendが要る
     //   スレッドセーフ化は省略
  }
  // ...
};
new Foo() を Foo のメンバ関数の中でやる分には自分自身の中でやることなので friend 宣言は不要。
std::make_unique<Foo>() をすると std::make_unique の中で Foo のコンストラクタを呼ぼうとするから std::make_unique<Foo> をフレンド宣言する必要がある。
824: デフォルトの名無しさん (ワッチョイ cd7c-a/1F) [sage] 2025/04/06(日) 10:21:41.86 ID:gleSakN+0(1) AAS
リスコフの置換原則を破るからあんまり良くはないと思うけどな
基底クラスとして振る舞わせる気がないならprivate継承すべきだ
854: デフォルトの名無しさん (ササクッテロロ Spd1-gX4K) [sage] 2025/04/11(金) 14:31:46.86 ID:2mKx2F8Up(1) AAS
それってOS付属のランタイムをrustで書いたらって事?
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.034s