例如
#include <iostream>
class JMP
{
public:
std::string number;
JMP() {}
JMP(const char* num) { number = num; }
JMP& operator+(JMP &j)
{
// Allocate object
JMP *sum_obj = new JMP("0");
sum_obj->number[0] += 1;
return *sum_obj;
} // <--- memory leak
};
int main()
{
JMP *a = new JMP(), *b = new JMP(), *c = new JMP();
*c = *a + *b;
delete a, b, c;
return 0;
}
如何删除分配的
sum_obj
对象?
使用智能指针可以帮助这里吗?
注意:我正在做这个对象进行大量的数学计算,请不要建议使用堆栈内存
任何参考或有用的答案将不胜感激
首先,返回引用是错误的。你需要返回一个值。
其次,显而易见的解决方案是根本不使用动态内存,例如:
class JMP
{
public:
std::string number;
JMP() {}
JMP(const char* num) { number = num; }
JMP operator+(const JMP &j)
{
JMP sum_obj("0");
sum_obj.number[0] += 1;
return sum_obj;
}
};
不过,如果你真的需要用堆对象做计算,你可以这样做:
#include <memory>
class JMP
{
public:
std::string number;
JMP() {}
JMP(const char* num) { number = num; }
JMP operator+(const JMP &j)
{
// Allocate object
auto sum_obj = std::make_unique<JMP>("0");
sum_obj->number[0] += 1;
return *sum_obj; // returns a copy
}
};