我如何 edit/fix 这个 class?
How do I edit/fix this class?
我想练习构建 classes。我在我的 class 中了解到内存泄漏从来都不是一件好事,当我调用这个 class 时,我是在创建一个对象,我是否需要在我的析构函数中添加一个删除函数来避免泄漏?谢谢!!!
#include <iostream>
#include <string>
using namespace std;
class Quadratic
{
public:
Quadratic(int ia, int ib, int ic);
int evaluate(int x);
private:
int a, b, c;
};
Quadratic::Quadratic(int ia, int ib, int ic)
{
a = ia;
b = ib;
c = ic;
}
int Quadratic::evaluate(int x)
{
int answer = a * (x * x) + b * x + c;
return answer;
}
Quadratic::~Quadratic() // ctrl + k + c to comment out large section of code.
{
cout << "Goodbye" << endl;
}
void main()
{
int list[3] = { 2,3,4 };
int* p1 = &list[0];
int* p2 = &list[1];
int* p3 = &list[2];
// calling a class looks like this
Quadratic* problem = new Quadratic(2, 3, 4);
int answer = problem->evaluate(0);
cout << answer << endl;
}
我可以看到您的代码存在三个问题,首先是析构函数:在析构函数中,您应该释放在这种情况下创建的任何动态项目,您有 none 这很好,您还应该设置变量到他们的默认值。重置 a、b 和 c 的值。其次,呼叫问题->评估不应该起作用。我不会声明 Quadratic* 名称,只声明 Quadratic 名称。将 problem->evalute 替换为 problem.evalute。最后,将头文件和实现文件分开(模板除外)通常是行业惯例。
C++ 不提供垃圾收集,所以是的,您确实需要手动删除内存。
您可以输入
delete problem;
使用完后。
您需要为 class 函数添加析构函数:
~Quadratic();
此外,您需要添加
delete problem;
到您的主要功能,以释放您的指针占用的内存。
对于那些说删除问题的人......这正是你不为 Quadratic 创建指针的原因......去掉 Quadratic 之后的 * 符号,你不需要稍后删除它。通常我们不在对象后使用 * 符号,有例外......现在已经用 C++ 编码 3 年了,我很少看到有人在这么大的程序中在对象后使用 * ..... * 意味着动态内存分配....您可能不想这样做...
谢谢,
陈云飞
我想练习构建 classes。我在我的 class 中了解到内存泄漏从来都不是一件好事,当我调用这个 class 时,我是在创建一个对象,我是否需要在我的析构函数中添加一个删除函数来避免泄漏?谢谢!!!
#include <iostream>
#include <string>
using namespace std;
class Quadratic
{
public:
Quadratic(int ia, int ib, int ic);
int evaluate(int x);
private:
int a, b, c;
};
Quadratic::Quadratic(int ia, int ib, int ic)
{
a = ia;
b = ib;
c = ic;
}
int Quadratic::evaluate(int x)
{
int answer = a * (x * x) + b * x + c;
return answer;
}
Quadratic::~Quadratic() // ctrl + k + c to comment out large section of code.
{
cout << "Goodbye" << endl;
}
void main()
{
int list[3] = { 2,3,4 };
int* p1 = &list[0];
int* p2 = &list[1];
int* p3 = &list[2];
// calling a class looks like this
Quadratic* problem = new Quadratic(2, 3, 4);
int answer = problem->evaluate(0);
cout << answer << endl;
}
我可以看到您的代码存在三个问题,首先是析构函数:在析构函数中,您应该释放在这种情况下创建的任何动态项目,您有 none 这很好,您还应该设置变量到他们的默认值。重置 a、b 和 c 的值。其次,呼叫问题->评估不应该起作用。我不会声明 Quadratic* 名称,只声明 Quadratic 名称。将 problem->evalute 替换为 problem.evalute。最后,将头文件和实现文件分开(模板除外)通常是行业惯例。
C++ 不提供垃圾收集,所以是的,您确实需要手动删除内存。
您可以输入
delete problem;
使用完后。
您需要为 class 函数添加析构函数:
~Quadratic();
此外,您需要添加
delete problem;
到您的主要功能,以释放您的指针占用的内存。
对于那些说删除问题的人......这正是你不为 Quadratic 创建指针的原因......去掉 Quadratic 之后的 * 符号,你不需要稍后删除它。通常我们不在对象后使用 * 符号,有例外......现在已经用 C++ 编码 3 年了,我很少看到有人在这么大的程序中在对象后使用 * ..... * 意味着动态内存分配....您可能不想这样做...
谢谢, 陈云飞