gpt4 book ai didi

c++ - 在构造函数中参数化指针

转载 作者:行者123 更新时间:2023-11-30 03:17:18 26 4
gpt4 key购买 nike

我正在将一个指针分配给一个类的构造函数中的指针。在析构函数中,我删除了作为成员变量的指针。这意味着当调用析构函数时,作为参数传入的指针也会被删除,但我不明白为什么。我制作了一小段代码来预览我的问题。

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 被删除,但我不明白为什么。有人可以帮助我理解这一点。谢谢。

最佳答案

您不是在“删除指针”,而是在删除该指针指向的对象(即使用 new Consolerite 创建的对象)。由于传递的指针和成员字段指针指向同一个对象,一旦您对它们中的任何一个使用 delete,它们都将失效。

此外,此程序具有未定义的行为,因为您正在使用指向基类的指针删除一个对象,该基类没有virtual 析构函数。

关于c++ - 在构造函数中参数化指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55609165/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com