动态地将内存分配给char指针

时间:2014-05-03 08:17:54

标签: c++ string char dynamic-allocation

这是正确的代码还是应该动态地将内存分配给接收char-pointer的String-class的member-variable?

#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;

}

1 个答案:

答案 0 :(得分:2)

让我们从陈述

开始
String string("hello");

这里“你好”是一个字符串文字。用作参数时,它会隐式转换为

类型的对象
const char *

因此该类的相应数据成员应定义为

const char *string;

结果应该将类定义为

class String 
{
private:
    const char *string;
public:
    String( const char *ch ) : string( ch )
    {
    }

    void print() const 
    {
        cout << string;
    }
};

由于字符串文字具有静态存储持续时间,因此您的代码有效。考虑到该类没有指针。

另一方面,如果您希望该类确实拥有指针,那么您需要动态分配构造函数参数指向的数据的副本。在这种情况下,您还需要至少明确定义复制构造函数,复制赋值运算符和析构函数。