动态分配内存给一个字符指针
Dynamically allocate memory to a char-pointer
这是正确的代码还是我应该动态地分配内存给接收字符指针的string类的成员变量?
#include <iostream>
using namespace std;
class String {
char *string;
public:
String(char *ch) {
string = ch;
}
void print() {
cout << string;
}
};
int main() {
String string("hello");
string.print();
return 0;
}
Let start from statement
String string("hello");
这里的"hello"是一个字符串字面值。作为参数使用时,它被隐式转换为
类型的对象。const char *
所以类的相应数据成员应该定义为
const char *string;
因此类应该定义为
class String
{
private:
const char *string;
public:
String( const char *ch ) : string( ch )
{
}
void print() const
{
cout << string;
}
};
由于字符串字面值具有静态存储时间,因此您的代码是有效的。请注意类不具有指针。
另一方面,如果您希望类确实拥有指针,则需要动态分配构造函数实参所指向的数据的副本。在这种情况下,至少还需要显式定义复制构造函数、复制赋值操作符和析构函数。相关文章:
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- 使用动态分配将 char* 复制到另一个字符**
- 如何将一个结构的字符数组复制到结构的另一个字符数组中?
- 如何在不知道对应关系的情况下在字符串中搜索字符并将其分配给另一个字符?
- 如何检查一个字符是否与字符数组中的另一个字符匹配?
- C++:使用另一个字符将一个字符大写
- 我可以得到一个字符 * 到一个 std::sregex_iterator 匹配 str() 吗?
- 使用连续分隔符和空最后一个字符进行拆分
- 如何比较文件中包含的下一个字符
- 如何检查字符串中的最后一个字符是否是某个字符并将其从字符串中删除?(C++)
- 如何从文本文件中一次读取一个字符
- 将一个字符替换为字符串中更多数量的字符,而不删除C++中的其他字母
- 读取输入后,输出丢失了一个字符
- 比较最后一个字符,不区分大小写(带谓词?
- 如果一个字符,比如说"9",我减去"0",我在结果上使用 is 数字,我是真还是假
- 为什么 std::istream::gcount 返回的字符比预期的多一个字符
- 使用 fstream 在空格分隔文件中查看下一项(不仅仅是一个字符)的方法
- 使用 char 将一个字符数组分配给另一个字符数组时出现奇怪的行为
- 在弦乐器中删除最后一个字符