Ниже приведен пример класса, который доступен для операции +
.Будет ли этот класс добавления причиной утечки памяти?
class A
{
public:
int *array;
A()
{
array = new int[10];
}
~A()
{
delete[] array;
}
A operator+ (const A &b)
{
A c;
for(int i=0; i<10; i++)
c.array[i] += array[i] + b.array[i];
return c;
}
};
int main()
{
A a,b,c,d;
/* puts some random numbers into the arrays of b,c and d */
a = b+c+d;
}
Будет a
запустить деструктор перед копированием результата b+c+d
или нет? Если нет, то как я могу убедиться, что нет утечки памяти?
Перегрузка оператора +
разработана таким образом, что никакой операнд не изменяется.
Что случилось с принятым ответом на [ваш предыдущий вопрос] (http://stackoverflow.com/q/10360232/78845)? И почему вы используете 'new int [10]', а не 'std :: vector'? – Johnsyweb
Я предполагаю, что это всего лишь пример, чтобы попытаться понять, но если бы это был реальный код, вы могли бы просто определить 'int array [10];', и тогда не нужно беспокоиться о правильном удалении. – Corbin
@Johnsyweb Ответ был замечательный, но это был просто пример, который я набросал без особого размышления. Этот пример не свидетельствует о моем взгляде на другие ответы. –