Это код, который я выполняю:Бросив исключение из конструктора - Core сбрасывали
B::B(Ptr* myPtr)
: A(myPtr!=nullptr ? myPtr->someFunction()
: throw std::invalid_argument("Invalid_argument"))
, localPtr_(myPtr)
{}
Итак, мой класс строится с указателем в качестве аргумента. Если этот указатель имеет значение nullptr, я хочу вызвать исключение Invalid Argument.
В основном у меня есть:
A* myAobject = new B(nullptr);
Итак, что я ожидаю, что компилятор бросает исключение, а затем вызывает деструкторы объектов, созданных.
Но я получаю:
terminate called after throwing an instance of 'std::invalid_argument'
what(): Invalid_argument
Aborted (core dumped)
И, если я пытаюсь: GDB ./main core.main я получаю:
Program terminated with signal SIGABRT, Aborted.
#0 0x00007fe14f81bcc9 in __GI_raise ([email protected]=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
56 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
Traceback (most recent call last):
File "/usr/share/gdb/auto-load/usr/lib/x86_64-linux- gnu/libstdc++.so.6.0.19-gdb.py", line 63, in <module>
from libstdcxx.v6.printers import register_libstdcxx_printers
ImportError: No module named 'libstdcxx'
Я не понимаю, почему ... Могли бы вы пожалуйста помогите?
Я уверен, что созданные объекты были разрушены? По-видимому, деструкторы не вызываются ... –
@aky - Объекты никогда не были полностью построены из-за исключения. Таким образом, нет никакого объекта для разрушения. –