如何拥有自己的没有公共构造函数的字符串类

How to have own string class with no public constructor?

本文关键字:构造函数 字符串 何拥有 拥有 自己的      更新时间:2023-10-16

我试图声明我自己的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行给了我一个错误

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

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

要修复您的即时编译错误,return *this;工作。然而,你问错了问题。

Do not Do this: class String: public std::string ever。(好吧,几乎永远——我可以构造一个理由,但它不会是一个好理由)