【问题标题】:Dynamically allocate memory to a char-pointer [closed]动态地将内存分配给字符指针[关闭]
【发布时间】:2014-06-19 22:49:55
【问题描述】:

这是正确的代码还是我应该为接收字符指针的字符串类的成员变量动态分配内存?

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

}

【问题讨论】:

  • 这取决于您的用例。在c++中处理字符串的正确方式是使用std::string
  • 你应该断言 ch 指向一个 char 向量而不是 NULL。另外,正如@πάνταῥεῖ所说,你应该使用 std::string

标签: c++ string char dynamic-allocation


【解决方案1】:

从语句开始

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

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

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

【讨论】:

    猜你喜欢
    • 2012-07-03
    • 2015-09-12
    • 2019-04-23
    • 2011-01-16
    • 1970-01-01
    • 2019-07-12
    • 2015-02-05
    • 2013-06-07
    • 2021-04-13
    相关资源
    最近更新 更多