Powszechnie wiadomo, że jeśli konstruktor rzuci, wszystkie w pełni skonstruowane sub-obiekty zostaną zniszczone w odwrotnej kolejności, w tym dane członków i wszystkie rodzaje klas bazowych. Jednak destruktor nie jest wywoływany dla nie-delegujących konstruktorów. Dla konstruktora delegującego obiekt został skonstruowany po wprowadzeniu ciała konstruktora, ale konstrukcja kontynuuje w pewnym stopniu. Powstaje zatem pytanie, czy destruktor klasy jest wywoływany, jeśli konstruktor delegujący zgłasza wyjątek z wnętrza swojego ciała?Czy destruktor jest wywoływany podczas rzucania konstruktora delegującego?
class X
{
public:
X();
X(int) : X() { throw std::exception(); } // is ~X() implicitely called?
~X();
};
'X' nie jest obiektem członkowskim' X', więc dlaczego miałby zostać wywołany jego destruktor? – Praetorian
@Praetorian: Ponieważ został w pełni skonstruowany przez delegującego konstruktora; i ponieważ standard mówi, że tak będzie. –
Powiązane: http://stackoverflow.com/q/14386840/981959 –