Giriş
Sanırım en çok placement new ile kullanır.
Tanımlama
Şöyle yaparız.
Elimizde move işlemini destekleyen bir yapı olsun.
Sanırım en çok placement new ile kullanır.
Tanımlama
Şöyle yaparız.
typename std::aligned_storage<sizeof(T) + 1, alignof(T)>::type bytes_{};
ÖrnekElimizde move işlemini destekleyen bir yapı olsun.
struct moveonly {
int x;
moveonly(int x) noexcept : x(x) {}
moveonly(moveonly&& o) noexcept : x(o.x) { o = {-1}; }
moveonly& operator=(moveonly o) noexcept {using std::swap; swap(x, o.x); return *this;}
};
Bir bellek alanı oluştururuz.std::aligned_storage<sizeof(moveonly), alignof(moveonly)>::type buffer;
moveonly* extracted = reinterpret_cast<moveonly*>(&buffer);
Elimizde bir iterator olsun. Şöyle yaparız.std::aligned_storage<sizeof(moveonly), alignof(moveonly)>::type buffer;
moveonly* extracted = reinterpret_cast<moveonly*>(&buffer);
auto it = ...;
new (extracted) moveonly{std::move(*it)};
Hiç yorum yok:
Yorum Gönder