如何拥有自己的没有公共构造函数的字符串类
How to have own string class with no public constructor?
我试图声明我自己的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。(好吧,几乎永远——我可以构造一个理由,但它不会是一个好理由)
相关文章:
- 在c++构造函数中使用随机字符串生成器
- c++ 构造函数 将 1 个字符串参数转换为 3 个属性
- C 字符串在显式构造函数中分配值C++?
- 我用字符串做了一个C++构造函数,但它不会打印出字符串
- C++继承:构造函数中的字符串构造
- 在派生自线程类的构造函数中传递字符串
- 在构造函数中浅拷贝字符串数组
- C++/Win32 构造函数不使用从对话框获取的字符串初始化变量
- 通过默认复制构造函数比较 C++ 字符串是否会影响性能,原因为何?
- 字符串是否在其构造函数中复制数据
- 在C++中,从构造函数中将字符串文本分配给成员const char*变量时会发生什么
- 带有字符串和bad_alloc检查的构造函数
- 具有字符串文本构造函数的类不适用于 const 引用初始化
- 如何将 std::string 作为构造函数参数传递,并将其保存的 C 字符串存储在 void 指针中?
- Pybind11:将字符串*参数传递给构造函数
- C++ 构造函数参数:字符串、整数、整数、整数
- 性能 - 使用字符串构造函数与使用串联
- 为什么在构造函数中将字符串分配给指针是安全的?
- 构造函数字符串参数未设置窗口标题
- C++默认构造函数:字符串参数与字符串参数()