动态分配内存给一个字符指针

Dynamically allocate memory to a char-pointer

本文关键字:一个 字符 指针 内存 动态分配      更新时间:2023-10-16

这是正确的代码还是我应该动态地分配内存给接收字符指针的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;
    }
};

由于字符串字面值具有静态存储时间,因此您的代码是有效的。请注意类不具有指针。

另一方面,如果您希望类确实拥有指针,则需要动态分配构造函数实参所指向的数据的副本。在这种情况下,至少还需要显式定义复制构造函数、复制赋值操作符和析构函数。
相关文章: