【问题标题】:Can my C++ program accidentally delete a system file if I delete a pointer?如果我删除指针,我的 C++ 程序会意外删除系统文件吗?
【发布时间】:2020-05-25 12:01:41
【问题描述】:

在我的程序中,我经常使用删除运算符。如果我的一个指针(比如 myPtr)指向存储系统文件的内存位置。 如果我在代码中使用“delete myPtr”,它会删除该文件吗? 我的 IDE(VS Code)为每个程序生成一个 exe 文件。当我从集成终端运行程序和运行 exe 文件时有什么区别吗? 如果要删除系统文件,会发生这种情况——从ide运行,运行exe文件,还是两者兼而有之?

【问题讨论】:

  • 不用担心。指针指向 RAM,而不是硬盘内存。操作系统也可能会保护这些文件。
  • 不,要删除文件,您需要更改文件系统。将其加载/卸载到内存中不应删除文件。
  • 如果你创建了一个类,其中析构函数也删除了一个文件,那么在这样一个类的对象上使用 delete 运算符,它会尝试删除文件。如果文件不存在,或者运行可执行文件的用户缺少权限,则尝试可能会失败。这不会是“意外”,而是相当蓄意的。
  • 如果您要删除的“事物”是某个对象,作为其析构函数(或其基础/派生的析构函数)的一部分,它会删除磁盘上的文件,那么可以肯定,它可以发生。但坦率地说,我更关心您首先使用手动内存管理的原因(例如“我经常使用删除运算符”)。智能指针几乎可以为您完成所有繁琐的工作,即便如此,只有在您真正进行动态管理时(您会惊讶于您的频率)。

标签: c++ windows pointers visual-studio-code dynamic-programming


【解决方案1】:

从集成终端运行程序和运行exe文件有什么区别

应该没有任何显着差异。

如果我的一个指针(比如 myPtr)指向存储系统文件的内存位置。如果我在我的代码中使用“delete myPtr”,它会删除那个文件吗?

delete 释放 RAM 块。文件存储在磁盘上,而不是 RAM 中。您的文件是安全的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 2013-01-27
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    相关资源
    最近更新 更多