Questions tagged «placement-new»


2
为琐碎的对象在“ this”上调用新的展示位置是否安全?
我知道这个问题已经被问过好几次了,但是我找不到针对这种情况的答案。 假设我有一个琐碎的类,它不拥有任何资源,并且具有空的析构函数和默认构造函数。它具有少数带有类内初始化的成员变量;没有一个是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是最终的)。这是一个坏主意吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.