从构造函数引发异常-Core Dumped
Throwing an exception from a constructor - Core Dumped
这是我执行的代码:
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/主要核心我得到:
Program terminated with signal SIGABRT, Aborted.
#0 0x00007fe14f81bcc9 in __GI_raise (sig=sig@entry=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'
我不明白为什么。。。你能帮帮我吗?
您需要捕获异常:
try
{
A* myAobject = new B(nullptr);
}
catch (std::invalid_argument& e)
{
// do something, exception was thrown...
}
请注意,在这种情况下不会调用A
析构函数,因为对象实际上从未完全创建。在此处进行测试:http://cpp.sh/7fmr
调用析构函数是不安全的,参见以下示例:
class B
{
public:
B( bool param ) : m_b1( (param) ? new int() : throw std::runtime_error("")
{
m_b2 = new int();
}
~B()
{
delete m_b1;
delete m_b2;
}
};
如果在构造函数抛出异常时调用了析构函数,则m_b2
保持未初始化状态,从析构函数中删除它将导致seg错误。
相关文章:
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- 为什么此代码中显示"*** stack smashing detected ***: <unknown> terminated Aborted (core dumped) "错误?
- 如何修复访问动态数组中结构中的字符串变量时"segmentation fault (core dumped)"错误
- 创建一个简单的类及其变量和函数不断返回" segmentation fault (core dumped)"、C++
- C++ 在类中删除动态 2D 数组时不断"Aborted (core dumped)"
- 尝试读取包含 ints 并存储在 int vector 中的文件,但我不断收到错误"Segmentation fault (core dumped)"
- (C++)在按位 OR 操作时获取错误"Illegal instruction (core dumped)"
- 队列类的取消排队方法"Aborted (core dumped)"错误
- 无法读取 Ubuntu "Segmentation fault (core dumped)"中的.dat或.bin文件
- C++ 链接列表队列实现和析构函数错误:"Aborted (Core Dumped)"
- qt app.exec() segmentation fault core dumped
- llvm pass segmentation fault:(Core dumped)
- 从构造函数引发异常-Core Dumped
- 为什么最后一行的运行结果是"Segmentation fault (core dumped)"
- 为什么 C++ 程序运行结果为 "Segmentation fault (core dumped)"
- 间歇性"Aborted Core Dumped" .也许是static_cast错?
- Segmentation Fault (core dumped) C++
- 动态初始化字符的 2D 数组时"Segmentation Fault [Core Dumped]"
- 运算符后"core dumped"错误 reinterpret_cast<const uint8_t*>
- 购物清单程序:在 VIM "Segmentation fault (core dumped)" 中,但代码块工作