Я назначаю указатель на указатель внутри конструктора класса. В деструкторе я удаляю указатель, который является переменной-членом. Это означает, что указатель, переданный в качестве аргумента, также удаляется при вызове деструктора, но я не могу понять, почему. Я сделал небольшой фрагмент кода для предварительного просмотра моего вопроса.
class IWrite {
public:
virtual void write(string) = 0;
};
class Consolerite : public IWrite
{
public:
void write(string myString)
{
cout << myString;
}
};
class OutPut
{
public:
OutPut(IWrite* &writeMethod)
{
this->myWriteMethod = writeMethod;
}
~OutPut() { delete this->myWriteMethod; }
void Run(string Document)
{
this->myWriteMethod->write(Document);
}
private:
IWrite* myWriteMethod = NULL;
};
int main()
{
IWrite* writeConsole = new Consolerite;
OutPut Document(writeConsole);
Document.Run("Hello world");
system("pause");
}
При выходе из программы IWrite * writeConsole удаляется, но я не могу понять, почему. Может кто-нибудь помочь мне понять это. Спасибо.