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

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
112
(1): デフォルトの名無しさん (ワッチョイ e1f0-JZT3) [sage] 2024/01/01(月) 03:01:35.02 ID:5pNbZa2B0(1) AAS
>>104
104(1): デフォルトの名無しさん (ワッチョイ e95f-pFp4) [sage] 2023/12/31(日) 20:09:05.68 ID:tpduSr4A0(1) AAS
class A{

char buf_[size];
}

このbuf_に任意のオブジェクトをplacement newして使用するのだけど
このオブジェクトをコピーしたりムーブする場合、単純にコピー元のbuf_からコピー先のbuf_にmemcopyしてしまって大丈夫ですか?
まず自分でコード書いてみ
よろしくないところは指摘してやるから
120: デフォルトの名無しさん (ワッチョイ e95f-pFp4) [sage] 2024/01/03(水) 23:34:38.84 ID:w4EAqTeZ0(1) AAS
>>112
とりあえず書いてみたけどどうですかね?

template<std::size_t buf_size>
struct A {
private:
struct base_ {
virtual ~base_() {};
};
template <typename F>
struct derived_ : base_ {
F f_;
derived_(F f) : f_{ std::move(f) } {}
};
base_* p_;
alignas(alignof(std::max_align_t)) uint8_t buf[buf_size]={0};

public:
A() :p_(nullptr) {};
template <typename F>
void assign(F f) {
if (p_ == nullptr) {
p_ = ::new (buf) derived_<F>{std::move(f)};
}
}
//コピーコンストラクタ
A(A& src) {
p_ = ::new (buf) decltype(src.*p_); //ここが怪しい
};
};
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.037s