Безопасно ли следующее?
struct K { ... }
struct A
{
A(int psize) : size(psize), foo(nullptr), bar(nullptr)
{
auto dataptr = (K*)_aligned_malloc(sizeof(K) * psize * 2, 32);
data = shared_ptr<K>(dataptr, ptr_fun(_aligned_free));
foo = data.get();
bar = data.get() + psize;
}
K* __restrict foo;
K* __restrict bar;
private:
shared_ptr<K> data;
};
Обратите внимание на __restrict для foo и bar.
Цель состоит в том, чтобы распределить память самоуничтожения, когда все псевдонимы объекта умерли.
{
A a(1000);
{
A o = a;
}
//a.foo is still valid
}
//a.foo is invalid