C ++ Оператор преобразования типов и утечка памяти - PullRequest
0 голосов
/ 18 июня 2011

Я хочу разрешить преобразование моего Class1 в Class2 с помощью оператора преобразования типов:

class  Class1     {
public:
    operator Class2() const {
      //....
    }
}

Но если я создам объект Class2 в реализации оператора, очень вероятно, что он не будет удален вызывающей стороной. Каков наилучший способ реализовать такую ​​функцию?

Ответы [ 3 ]

2 голосов
/ 18 июня 2011

Удаление необходимо только в том случае, если вы делаете что-то сумасшедшее, как это:

operator Class2() const
{
    Class2 *p = new Class2();
    ...
    return *p;
}

Однако, все в порядке:

operator Class2() const
{
    Class2 c2;
    ...
    return c2;
}
0 голосов
/ 18 июня 2011

Вы должны сделать что-то вроде этого

operator Class2() const 
{
    Class2 tmp;
    ...
    return tmp;
}

Тогда, если у вас есть что-то вроде этого

Class1 c1;
Class2 c2 = c1;

, память для tmp будет выделена в стеке, тогда конструктор копированияиз Class2 будет вызван для копирования tmp в c2, а затем будет вызван деструктор tmp, поскольку это автоматическая переменная.

0 голосов
/ 18 июня 2011

Вы не должны выделять память в куче, а сделать Class2 в стеке. Тогда он будет уничтожен при выходе из функции.

...