【发布时间】:2009-12-06 16:08:38
【问题描述】:
我正在为我的库设计一个 C++ 中的异常层次结构。 “层次结构”是从 std::runtime_error 派生的 4 个类。我想避免为异常类使用slicing problem,从而使复制构造函数受到保护。但显然 gcc 在抛出它们的实例时需要调用复制构造函数,因此抱怨受保护的复制构造函数。 Visual C++ 8.0 可以很好地编译相同的代码。是否有任何可移植的方法来化解异常类的切片问题?标准是否说明了实现是否可以/应该需要要抛出的类的复制构造函数?
【问题讨论】:
-
几乎在任何可以使用复制构造函数的地方,C++ 标准都允许省略它的使用。但是如果你希望你的代码是可移植的,异常就必须有一个可公开访问的复制构造函数。
-
另外,我不知道您使用的是哪个版本的 VC++,但是您的 VC++ 6.0 确实需要一个复制构造函数 - 我刚刚测试过。
标签: c++ exception gcc derived object-slicing