将对象传递给构造函数中的函数和动态内存分配

时间:2014-07-20 14:37:38

标签: c++

我得到了一个功课,可以将对象传递给成员函数,并在C ++中使用构造函数(必须遵循动态内存分配来存储值)。检查下面给出的代码。

#include<iostream>
using namespace std;

class room
{
    char *a;
    public:
    room(string e)
    {
        a = new char[e.length()];
        string a(e);
    }
    friend void show(room);
};

void show(room z)
{
    cout << z.a;
}

int main()
{
    string c;
    cout << "Enter: ";
    cin >> c;
    room A(c);
    show(A);
}

现在,我希望在编译代码后,必须通过show()打印作为输入的字符串。

如何修改代码以获取show()??

的输出

1 个答案:

答案 0 :(得分:0)

您的代码中存在几个问题:

  • 成员a未初始化
  • 使用了复制构造函数但未实现:show(A)copy A
  • 成员a未被释放

修复此问题会产生类似的结果:

#include<stdlib.h>
#include<string.h>
#include<iostream>

using namespace std;

class room
{
    char *a;
    public:
    room(string e) : a(strdup(e.c_str())) {};
    room(const room &); // not implemented copy construtor
    room & operator=(const room &); // not implemented copy operator
    ~room() { free(a); };
    friend void show(const room &);
};

void show(const room & z)
{
    cout << z.a;
}

int main()
{
    string c;
    cout << "Enter: ";
    cin >> c;
    room A(c);
    show(A);
}

但正如评论中所建议的那样,使用std :: string存储值是char *的更好替代方法。