首页 > TAG信息列表 > delete-operator

c-什么是“ :: operator new”和“ :: operator delete”?

我知道new和delete是关键字. int obj = new int; delete obj; int* arr = new int[1024]; delete[] arr; &LT新&GT标头是C标准标头的一部分.它有两个运算符(我不确定它们是运算符还是函数): :: operator new ::运算符删除 这些运算符的用法如下: #include <new> using namespace

c – 删除一系列指针 – 我做得对吗?

我对删除指针的问题感到有些愚蠢,但我需要确保以正确的方式删除,因为我正在进行程序的调试过程. 基本上我有几个指针数组,在我的头文件中定义如下: AsteroidView *_asteroidView[16]; 在for循环中,我然后初始化它们: for(int i = 0; i < 16; i++) { _asteroidView[i] =

c – 为什么在析构函数中抛出异常时未调用重载删除?

我编写了下面的代码,它重载了new和delete操作符,并在析构函数中抛出异常. 抛出异常时,为什么delete操作符中的代码没有执行(并且“bye”打印)? 如果不应该执行,(如何)释放内存?是one of the other delete operators被叫?是否会重载其中一个而导致执行相应的代码?或者内存根本没有被释放

c – 如何正确删除std :: list中的指针?

我正在通过new创建一个对象,然后在设置对象后将指针添加到std :: list. 删除指针和从列表中删除数据而不会导致内存泄漏的正确方法是什么?解决方法:我宁愿使用std :: find_if,而不是手动循环来搜索元素 auto it = std::find_if(lst.begin(), lst.end(),

c – 删除和无效指针

int main() { char* a=new char[20]; cin>>a; cout<<" character at 7-th position."<<a[6]; delete a+4; cout<<a[0]; return 0; } 输入: 1234567894567 输出: character at 7-th position.6 *** glib

删除对象时出现C断言错误

我有奇怪的断言错误,我找不到这个代码有什么问题. 断言表达式是_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse). 为了更好的可读性,我简化了一些代码. class Creator { public: virtual ~Creator() { for (MyObject* item : _list) { delete item;

c – 虚拟继承中的析构函数

class Base{}; class D1:virtual public Base{}; class D2:virtual public Base{}; class DD:public D1,public D2{}; int main(){ Base *pBase=new DD; delete pBase; } 这导致崩溃,但我修改如下: class Base{ public: virtual ~Base(){}; }; class D1:virtual pu

c – 面向对象的自杀或删除此;

以下使用MSVC9.0编译的代码运行并输出Destructor四次,这是合乎逻辑的. #include <iostream> class SomeClass { public: void CommitSuicide() { delete this; } void Reincarnate() { this->~SomeClass(); new (this) SomeClass; } ~Some

c – 析构函数中的= delete如何阻止分配?

在此SO question中声明此构造可防止实例的堆栈分配. class FS_Only { ~FS_Only() = delete; // disallow stack allocation }; 我的问题是,它如何阻止分配?我理解,无法显式或隐式删除此实例.但我认为,这将分别导致内存泄漏或运行时错误. 编译器是否足够聪明以排除这种情况并

c – 指向子类的指针上的delete是否调用基类析构函数?

我有一个A类,它为其中一个字段使用堆内存分配. A类被实例化并存储为另一个类(B类)中的指针字段. 当我完成了B类的一个对象时,我调用了delete,我假设它调用了析构函数……但这是否也调用了类A的析构函数? 编辑: 从答案中,我接受了(请编辑,如果不正确): >删除B调用B ::〜B()的实例; >调

c – queue :: push后双重释放或损坏

#include <queue> using namespace std; class Test{ int *myArray; public: Test(){ myArray = new int[10]; } ~Test(){ delete[] myArray; } }; int main(){ queue<Test> q Test t; q.push(t);

你怎么在C中’realloc’?

我怎样才能在C中重新分配?它似乎从语言中缺失 – 有新的和删除但没有调整大小! 我需要它,因为当我的程序读取更多数据时,我需要重新分配缓冲区来保存它.我不认为删除旧指针和新的更大的指针是正确的选择.解决方法:使用:: std :: vector! Type* t = (Type*)malloc(sizeof(Type)*n) me

c – 为什么删除void *是UB而不是编译错误?

为什么通过void *删除对象是未定义的行为,而不是编译错误? void foo(void* p) { delete p; } 这段代码编译并生成代码,虽然gcc和clang上有警告(令人惊讶的是,ICC没有发出警告): :2:5: warning: cannot delete expression with pointer-to-‘void’ type ‘void *’ [-Wdel

c – 释放包含字符串变量的结构

我有以下结构 struct node { string name; bool isDir; int size; string data; //lets store this as a string timespec atime; timespec ctime; timespec mtime; list <node*> children; }; 如果我有一个声明节点指针的话 node * directory = new node; 然后 用值填充

c – 使用与new中使用的类型不同的指针删除内存是否安全?

以下代码是否安全?有没有提到C标准来解决这个问题? // SomeStruct is POD: no constructors or destructor SomeStruct *pSS = new SomeStruct(); void *pV = reinterpret_cast<void*>(pSS); delete pV; 解决方法:这只适用于: >你删除一个指向基地的指针, >并且该基类具有虚拟析构函

C删除不起作用?

我遇到了删除和析构函数的问题(我确信我在这里犯了一个愚蠢的错误,但是到目前为止还没能弄明白). 当我逐步进入析构函数,并尝试在指针上调用delete时,消息显示“无法访问地址某个地址的内存”. 相关代码是: /* * Removes the front item of the linked list and returns the value

c – 我是否正确删除了这个?

我有一些结构: struct A { const char* name_; A* left_; A* right_; A(const char* name):name_(name), left_(nullptr), right_(nullptr){} A(const A&); //A(const A*);//ToDo A& operator=(const A&); ~A() { /*ToDo*/ }; }; /*Just to co

了解C动态分配

请考虑以下代码: class CString { private: char* buff; size_t len; public: CString(const char* p):len(0), buff(nullptr) { cout << "Constructor called!"<<endl; if (p!=nullptr) { len= strlen

c – 删除指针时崩溃

我有一个创建PriorityQueue结构的任务,我遇到了这段代码的问题.当我在我的compilator上编译它时一切都很好,但我尝试将它提交到ideone并且我收到以下错误: “glibc detected *** ./prog: double free or corruption”. 我能够跟踪给我这个错误的部分,我发现造成崩溃的原因是我试

c – 删除指针的分段错误

#include <iostream> using namespace std; class c1 {}; class c2 : public c1 {}; class c3 : public c1 {}; class c4 : public c2, public c3 {}; int main () { c4 *x1 = new c4; c3 *x2 = x1; delete x2; // segmentation fault } 嗨,我想了解类型转换和继承,我发现

c – 删除或指定零指针

在代码中的什么情况下,我们应该删除一个给定的指针,在哪里我们最好为它指定零,而不是删除?解决方法: In what situations in the codes, should we delete a given pointer and where had we better assign zero to it, instead of deleting? 如果使用new创建指针,则删除指针.

c – 删除使用new创建的2D或3D指针

如何删除使用new创建的2D或3D指针?我知道删除[] name_of_pointer可以删除1D指针. // 1D pointer: int *pt1 = new int[size]; // Creating 1D pointer delete [] pt1; // Deleting 1D pointer // 3D pointer L: # of layers, R: # of rows,

C管理对象

我有一个游戏服务器.它会创建Game的多个实例并将它们添加(或者指向它们的指针?它有什么更好的?它有10个整数和5个其他指针,10个成员函数)到向量.之后,一些事件发生在游戏内部e. G. game_ends.在这个时刻,游戏应该从矢量中删除……实现它的最佳方法是什么? 我们遇到的两种方式是: >创建

c – 为什么我必须在“原始”指针上调用delete?

我想知道为什么在下面的代码中第一次删除不会释放内存: #include <list> #include <stdio.h> struct abc { long a; abc() { puts("const"); } ~abc() { puts("desc"); } }; int main() { std::list<abc*> test;

从JavaScript对象中删除falsies

所以我编写了一个简短的函数来从具有虚假值的对象中删除成员: for (var key in object) { if (!object[key]) { delete object[key]; } } 几天后,我检查源代码控制,有人将其更改为: var newObject = {}; for (var key in object) { if (object[key]) { newObj