草庐IT

pthread_key_delete

全部标签

c++ - std::auto_ptr、delete[] 和泄漏

为什么这段代码不会导致内存泄漏?intiterCount=1000;intsizeBig=100000;for(inti=0;ibuffer(newchar[sizeBig]);}WinXPsp2,编译器:BCB.05.03 最佳答案 因为你(不)幸运。auto_ptr调用delete,而不是delete[]。这是未定义的行为。尝试做这样的事情,看看你是否幸运:structFoo{char*bar;Foo(void):bar(newchar[100]){}~Foo(void){delete[]bar;}}intiterCount=1

c++ - 为什么我会收到编译错误 "use of deleted function ' std::unique_ptr ...”

我收到一个巨大的编译错误信息c:\mingw\include\c++\6.1.0\bits\predefined_ops.h:123:18:error:useofdeletedfunction'std::unique_ptr::unique_ptr(conststd::unique_ptr&)[with_Tp=Deduction;_Dp=std::default_delete]'{returnbool(_M_comp(*__it1,*__it2));}当我将自定义比较器传递给STLset_difference函数时。我的代码:structValue{std::stringded_cod

详解数据库SQL中的三个语句:DROP、TRUNCATE 、DELETE

本文分享自华为云社区《GaussDB数据库SQL系列-DROP&TRUNCATE&DELETE》,作者:Gauss松鼠会小助手2。一、前言在数据库中,SQL作为一种常用的数据库编程语言,扮演着至关重要的角色。SQL不仅可以用于创建、修改和查询数据库,还可以通过DROP、DELETE和TRUNCATE等语句来删除数据。这些语句是SQL语言中的最常用的命令,且它们有着不同的含义和使用场景。本文以GaussDB数据库为平台,将详细介绍SQL中DROP、TRUNCATE和DELETE等语句的含义、使用场景以及注意事项,帮助读者更好地理解和掌握这些常用的数据库操作命令。二、GaussDB的DROP&TR

Object.keys方法之详解

Object.keys方法之详解Object.keys()方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和正常循环遍历该对象时返回的顺序一致。语法Object.keys(obj)参数要返回其枚举自身属性的对象。返回值一个表示给定对象的所有可枚举属性的字符串数组。描述Object.keys()返回一个所有元素为字符串的数组,其元素来自给定的object上面可直接枚举的属性。这些属性的顺序与手动遍历该对象属性时的一致。示例一、传入对象,返回属性名letobj={name:"张三",age:25,address:"深圳",getName:function(){}}co

c++ - 使用 "delete this"删除当前对象是否可以?

我正在编写一个链表,我希望一个结构的析构函数(一个Node结构)简单地删除自身,并且没有任何副作用。我希望我的列表的析构函数在其自身上迭代调用节点析构函数(临时存储下一个节点),如下所示://mylistclasshasfirstandlastpointers//andmynodeseachhaveapointertothepreviousandnext//nodeDoublyLinkedList::~DoublyLinkedList{Node*temp=first();while(temp->next()!=NULL){deletetemp;temp=temp->next();}}所

c++ - 析构函数——我应该使用 delete 还是 delete[]?

我正在编写一个模板类,它将一个指针作为输入并存储它。该指针旨在指向由另一个类分配的对象,并传递给this包含类。现在我想为这个容器创建一个析构函数。我应该如何释放这个指针指向的内存?我无法先验地知道它是数组还是单个元素。我是C++的新手,所以请多多包涵。我一直使用C,而Java是我选择的OO语言,但在想要学习C++和我项目的速度要求之间,我选择了C++。将容器从模板更改为可以实现自己的析构函数的抽象类的容器是否更好? 最佳答案 如果你不知道它是用new还是new[]分配的,那么删除它是不安全的。您的代码可能看起来有效。例如,在我工作

c++ - Valgrind 报告不匹配的 free()/delete/delete []

我正在编写一个可以在多个系统上运行的库(其中一些没有malloc或stdlib)。在我的标准库(不同的库)中,我覆盖了new和delete运算符以对函数进行通用调用(此示例没有这些函数)。每个系统都会将这些通用调用覆盖到它们各自的内存分配设备。问题是当我尝试这样做时。下面是一些精简的示例代码来重现该问题:#includevoid*operatornew(unsignedlongsize){returnstd::malloc(size);//wouldnormallycallanintermediatefunctionwhichwouldbeoverriddenbythesystem}v

c++ - 为什么使用 std::mutex 的函数会对 pthread_key_create 的地址进行空检查?

采用这个简单的函数,在由std::mutex实现的锁下递增整数:#includestd::mutexm;voidinc(int&i){std::unique_locklock(m);i++;}我希望这(在内联之后)以一种直接的方式编译为调用m.lock()增量i然后m.unlock().检查为最新版本的gcc和clang生成的程序集,但是,我们发现了一个额外的复杂问题。先拿gcc版本:inc(int&):moveax,OFFSETFLAT:__gthrw___pthread_key_create(unsignedint*,void(*)(void*))testrax,raxje.L2p

c++ - C++ 标准中哪里说::delete 可以更改左值?

我遇到了我的第一个编译器,它更改了传递给::delete的左值,但没有将左值清零。以下是正确的:Foo*p=newFoo();Foo*q=p;assert(p!=0);assert(p==q);::deletep;assert(p!=q);assert(p!=0);请注意,删除操作后p不为零,它已从旧值改变。一位同事告诉我,根据他使用一些大型机C++编译器将p更改为0xFFFFFFFF以及将p更改为0的其他编译器的经验,这并不罕见。在C++标准中哪里说允许编译器这样做?通过StackOverflow搜索,我发现了这个问题:Whydoesn’tdeletesetthepointertoN

c++ - Google 的 dense_hash_map 在 set_empty_key() 函数中崩溃

我正在尝试使用googledense_hash_map来存储键值数据而不是std:map。当我使用(int,int)对进行测试时,我设置了set_empty_key(mymap,-2)并且它起作用了。但是,现在当我将它与我的(hash,value)对一起使用时,我设置了set_empty_key(mymap-2)或set_empty_key(mymap,some_random_hash),在这两种情况下我的程序都会在set_empty_key();中崩溃。有人可以指导我吗?我该如何修复此崩溃?谢谢。 最佳答案 我不知道您遇到的崩溃的