从std :: string派生的类的构造函数,而不是编译

时间:2016-08-01 19:15:57

标签: c++ inheritance constructor

在Effective C ++的第42页第2章中,作者给出了一个从std::string(具有非虚拟析构函数)派生类的示例,然后delete一个实例通过基指针派生类,以及这是如何未定义的行为。

这很好,所有,但他给出的例子甚至没有编译,并且完全不相关的原因。在这里,我尽可能地重新编写了本书中的代码,以获得最小的工作示例:

#include <string>
#include <new>

class SpecialString: public std::string{};

int main(){
  SpecialString *pss = new SpecialString("Impending Doom");
  std::string *ps = pss;
  delete ps;
  return 0;
}

但是,构建SpecialString的行不会在我的GCC上编译,因为它正在尝试将const char* "Impending Doom"转换为const SpecialString&,而不是调用{{ 1}},这就是我猜这本书所期望的。我的假设在这里有什么问题吗?

0 个答案:

没有答案