草庐IT

pthread_key_delete

全部标签

c++ - 为什么 std::map 没有 insert(key &, value & v) 类型的插入函数

为什么std::map不支持如下插入:std::mapmap_int;voidinsert_map(obj1&key,obj2&val){map_int.insert(key,val);}我知道以上是不正确的。我想知道是什么阻止了这样设计插入功能。它比创建一对IMO更直观。 最佳答案 它叫做emplace():std::mapm;//usespair'stemplateconstructorm.emplace("d","ddd"); 关于c++-为什么std::map没有insert(k

c++ - 将字符串传递给 pthread 函数

我是pthreads的初学者,请多多包涵。我试图将一个字符串传递给thread_routine1函数。它以一个空指针作为参数。然后我想打印出来。void*thread_routine1(void*arg1){cout在pthread_creat函数中,我试图传递字符串,但我得到了从字符串到void指针的无效转换类型。我知道我可能会在不止一个地方出错,所以我会很感激一些指示。 最佳答案 这真的与pthreads无关。你做这个投(void*)t1,这实际上是在类型系统上使用大锤。C++中的字符串不是指针,因此将其转换为-并将其视为-只会

c++ - 我应该在我的 C++ WIn32 应用程序中重写 operators new/delete

我知道Microsoft自己曾经建议通过调用HeapCreate()和HeapAlloc()来覆盖operatornew,但那是不久前的事了。有关详细信息,请参阅KB139638。在Win32上重写new/delete是否仍然有益?推荐的实现方式是什么?TIA。 最佳答案 这篇文章说你可以做,而不是说你应该。其中的代码写得很糟糕,一点也不有趣,而且它不是线程安全的。通常,提供的new和delete实现可以很好地满足所有一般编程需求。只有当您确定了重新实现可以解决的特定问题时,您才应该考虑重新实现它们。

c++ - C++ delete 语句的动态是什么?

这只是出于好奇,因为除了最基本的用途外,我没有在c++中使用过new和delete。我知道delete会释放内存。我想知道的是它如何处理更复杂的情况?例如,如果我有这样一个用户定义的类:classMyClass{public:MyClass();~MyClass(){delete[]intArray;}//publicmembershereprivate:int*intArray;};假设该类以某种方式为intArray分配内存,然后在析构函数中释放它,如果我这样使用该类会怎样:MyClass*myClass=newMyClass();并稍后使用deletemyclass;发布它del

c++ - 在 valgrind 中将 QSharedPointer 与 new[] 一起使用会产生 "Mismatched free()/delete/delete[]"

我有以下代码:QPair,int>someclass::somefunction(){intsiz=data_size();QSharedPointerbuffer(newunsignedint[siz]);//Fillthebuffer...returnqMakePair(buffer,siz);}在某些时候,此函数返回的QSharedPointer将超出范围,构造函数中设置的指针将被释放。使用valgrind3.6.1,出现“不匹配的free()/delete/delete[]”错误。我对QSharedPointer的使用有什么问题吗?还是我只能忍受这个valgrind警告?

C++ STL : Why is there no upper_bound equivalent that retrieves the greatest element smaller then a specific key?

通常,STL是为提高速度而构建的。然而,在map和set数据结构上只有upper_bound和lower_bound并且没有操作来检索具有小于输入键的最大键的条目k.为什么是这样?我知道我可以简单地做一个lower_bound并做一个--it检索它,但根据数据结构,立即搜索正确的条目可能比搜索另一个条目然后返回一步更有效。例如,std::map使用红黑树,即二叉搜索树。如果upper_bound返回的元素是大于根的最小元素,则--it必须回到根,查询O(logn)的额外成本。如果这是Java,我会接受设计决定。然而,STL是为实现最高速度而构建的,那么为什么要省略此操作?澄清:我不是在

c++ - myVector.erase(myObject) 是否在 myObject 上调用 delete?

类似于thisquestion但使用对象而不是指针。如果我有如下代码Foof;vectorvect;vect.push_back(f);vect.erase(vect.begin());我的对象去了哪里?是否调用了删除?如果其他人持有指向它的指针怎么办?这是内存泄漏吗? 最佳答案 push_back在vector中存储f的拷贝,然后erase销毁它。f本身不受此影响。当您删除时,vector中元素的所有指针、引用和迭代器都将失效。在erase之后使用它们访问元素会产生未定义的行为。 关于

c++ - pthread_join() 是否允许调用线程继续执行?

编辑:我错误地假设线程实际上是在pthread_create上开始运行时才在pthread_join上运行。我正在学习使用Posix线程,我读过:pthread_join()-等待线程终止所以,在代码示例中,main的exit(0)直到两个启动的线程都结束才到达。但是在第一次调用pthread_join()之后,main继续执行,因为第二次调用pthread_join()实际运行了,并且打印了中间的消息。那怎么样?main是否在两个线程都未完成时继续执行?还是不是?我知道这不是一种可靠的测试方法,但是第二条测试消息总是在两个线程都完成后打印出来,无论循环有多长。(至少在我尝试时在我的机

C++ STL 映射无法识别 key

我有这段代码,CBString只是我用于某些处理的字符串类char*scrummyconfigure::dosub(strtypeinput){CBStringtstring;tstring=input;uintbegin;uintend;begin=tstring.findchr('$');end=tstring.findchr('}',begin);CBStringk=tstring.midstr(begin+2,end-2);//thisisBASEstrtypevname=(strtype)((constunsignedchar*)k);strtypebvar=(strtype

c++ - "while"和 "delete"的这种奇怪组合意味着什么?

回顾一个相当古老的项目,我发现了以下奇怪的代码片段(仅提取了相关代码):classCCuriousClass{~CCuriousClass();CSomeType*object;};CCuriousClass::~CCuriousClass(){while(object!=NULL){deleteobject;}}我是否监督过任何事情,或者这是一条通向未定义行为的平坦道路?我在这里看到的是,如果object在CCuriousClass::~CCuriousClass()被调用时是一个空指针,一切都会好起来的——没有采取任何行动-但如果object不为null,这将是一个内部具有未定义行