タグ付けされた質問 「placement-new」


2
簡単なオブジェクトの場合、 `this`で新しい配置を呼び出しても安全ですか?
この質問はすでに何度か尋ねられたことは知っていますが、この特定のケースに対する答えは見つかりませんでした。 リソースを所有しておらず、空のデストラクタとデフォルトのコンストラクタを持つ簡単なクラスがあるとします。クラス内で初期化されるメンバー変数がいくつかあります。それらの1つはありませんconst。 そのようなクラスのオブジェクトを再初期化し、deInit手動でメソッドを記述せずにそれをしたいと思います。このようにしても安全ですか? void A::deInit() { new (this)A{}; } 問題はありません。オブジェクトは常に有効な状態でありthis、同じアドレスを指しています。C ++なので、確認したい。

2
タイプ・パンニング・テーマのバリエーション:インプレース・トリビアル・コンストラクション
これはかなり一般的なテーマであることは知っていますが、典型的なUBを見つけるのは簡単ですが、今のところこの亜種は見つかりませんでした。 そこで、実際のデータのコピーを避けながら、Pixelオブジェクトを正式に紹介しようとしています。 これは有効ですか? struct Pixel { uint8_t red; uint8_t green; uint8_t blue; uint8_t alpha; }; static_assert(std::is_trivial_v<Pixel>); Pixel* promote(std::byte* data, std::size_t count) { Pixel * const result = reinterpret_cast<Pixel*>(data); while (count-- > 0) { new (data) Pixel{ std::to_integer<uint8_t>(data[0]), std::to_integer<uint8_t>(data[1]), std::to_integer<uint8_t>(data[2]), std::to_integer<uint8_t>(data[3]) }; data += sizeof(Pixel); } return result; // throw in …

1
新しい(this)ThisClass()は悪い考えですか?
class FooView final : public Something { ... void refresh() { this->~FooView(); new (this) FooView(); } } 私はこのイディオムを見たことがなく、本当に微妙で厄介なように見えるかもしれませんが、(FooView最終的なものである限り)実際に問題を考えることはできません。これは悪い考えですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.