gpt4 book ai didi

c++ - 如何在没有公共(public)构造函数的情况下拥有自己的字符串类?

转载 作者:行者123 更新时间:2023-11-30 00:53:58 27 4
gpt4 key购买 nike

我正在尝试声明我自己的 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 &);
};

我的限制之一是:

There is no need for a public constructor, though you would need a private (or undocumented one). Also, note that this String class will allow us to use optimized memory management.

我对突出显示的行感到困惑。我尝试实现如下:

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 行给我一个错误。

最佳答案

出于一些原因,从像 std::string 这样的类继承通常是不好的做法,包括它有一个非虚析构函数的事实,所以有人可以有一个指向 的指针>std::string 并没有意识到它实际上是一个指向你的指针,删除它,你的析构函数将永远不会被调用。

你的类有状态,所以它需要一个析构函数,所以不允许从 std::string 继承。

要修复您的直接编译错误,return *this; 有效。但是,您问错了问题。

永远不要这样做:class String: public std::string。 (好吧,几乎永远——我可以构建一个理由,但这不是一个好理由)

关于c++ - 如何在没有公共(public)构造函数的情况下拥有自己的字符串类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15182098/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com