Bunu yapabilirsiniz, ancak referans veya const üyeleriniz varsa veya sınıfın türü değişirse bunun için bellek yıkamaya ihtiyacınız olacaktır.
Bunu düşün:
struct FooView {
const int val;
void refresh()
{
this->~FooView();
new (this) FooView{5};
}
}
int main() {
FooView fv{9};
std::cout << fv.val; // surely 9!
fv.refresh();
std::cout << fv.val; // hmm... val is a const object, so it's 9 still?
}
Bu tanımsız davranışı önlemek için, belleği kullanarak aklamak gerekir std::launder. Derleyici, kullanım ömrünün fvdışındaki herhangi bir şeyden etkilenmeyeceğini varsayacaktır }. Aklama derleyicinin aşağıdakilerle ilgisi olmayan bir nesne olduğunu varsaymasını sağlayacaktır fv:
int main() {
FooView fv{9};
std::cout << fv.val; // surely 9!
fv.refresh();
std::cout << std::launder(&fv)->val; // yay, 5
}
Şimdi iyi bir fikir mi? Karışıklıklara yol açabileceğinden, ancak güvenli bir şekilde yapılabileceğinden buna karşı tavsiye ederim.