【发布时间】:2014-01-19 11:13:03
【问题描述】:
首先我想指出我使用的是 GNU GCC 编译器。我使用 Code::Blocks 作为我的 IDE,因此我不必在 Windows DOS 命令提示符中输入所有编译器垃圾。如果我可以更具体地了解我的编译器,当我成功编译时,在 Cod::Blocks 底部显示的一行是
mingw32-g++.exe -std=c++11 -g
无论如何,我的问题涉及使用删除运算符来释放动态分配的内存。当我编译这段代码 sn-p:
int* x;
x = new int;
delete x;
delete x;
我没有收到任何警告、错误或崩溃。从我正在学习 C++ 的书中,释放指向动态分配的内存卡盘的指针只能执行一次,然后指针无效。如果再次对同一个指针使用delete,就会出现问题。但是,我不明白这个问题。
同样,如果我将一个对象按值传递给一个函数,这样它就被浅拷贝了,如果我没有一个拷贝构造函数来确保深拷贝(在对象中使用原始指针),我不会出错。这意味着当函数返回时,浅拷贝超出范围,并调用其析构函数(我在指针上使用 delete)。当 int main 返回时,原始对象超出范围,调用其析构函数,并删除相同的浅拷贝指针。但我没有问题。
我尝试在线查找有关我正在使用的编译器的文档,但找不到任何文档。这是否意味着 mingw32 编译器使用了某种默认的复制构造函数?因此,我不必担心创建复制构造函数?
【问题讨论】:
-
你没有遇到任何问题,因为你很幸运。我建议立即购买一堆强力球门票。
标签: gcc memory compiler-construction delete-operator