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

foo*_*oty 1 c++ oop string

我试图声明我自己的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 &);
};
Run Code Online (Sandbox Code Playgroud)

我有一个限制因素是:

没有必要的公共构造函数,但你需要一个私人(或无证之一).另请注意,此类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;
        };
};
Run Code Online (Sandbox Code Playgroud)

但我面临着这种方法的问题,因为这是错误的.我做错了什么,实施它的正确方法是什么?

主要问题是将我的String对象转换为std::string.这该怎么做?return thisline给了我一个错误.

Yak*_*ont 6

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

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

要修复你的立即编译错误,请return *this;运行.但是,你提出了错误的问题.

千万不能做到这一点:class String: public std::string永远.(好吧,差不多 - 我可以构建一个理由,但它不会是一个好的理由)