我试图声明我自己的String
类,它模仿std :: string类。以下是String
类。
class String {
public:
// Copy constructor.
String(const String &);
// Conversion to std::string.
operator std::string() const;
// Assignment.
String &operator=(const String &);
};
我有一个限制因素是:
不需要公共构造函数,但您需要一个 私人(或未记录的)。另请注意,此
String
课程 将允许我们使用优化的内存管理。
我对突出显示的行感到困惑。我尝试按如下方式实施:
class String: public std::string {
private:
String();
String *s;
public:
// Copy constructor.
String(const String &a) {
s = a.s;
};
// Conversion to std::string.
operator std::string() const {
return this;
};
// Assignment.
String& operator=(const String &a) {
if(this != &a) {
s=a.s;
}
return *this;
};
};
但我面临这种方法的问题,因为这是错误的。我做错了什么,实施它的正确方法是什么?
主要问题是将String
对象转换为std::string
。这该怎么做? return this
行给了我一个错误。
答案 0 :(得分:6)
由于某些原因从类std::string
继承,这通常是不好的做法,包括它有一个非虚拟析构函数,所以有人可以指向std::string
并且没有意识到它实际上是一个指向你的指针,删除它,你的析构函数永远不会被调用。
你的类有状态,所以它需要一个析构函数,所以不允许从std::string
继承。
要修复您的即时编译错误,return *this;
有效。但是,你提出了错误的问题。
不执行此操作:class String: public std::string
。 (好吧,几乎永远 - 我可以构建一个理由,但它不会是一个好的)