草庐IT

was_deleted

全部标签

c++ - "gets() was not declared in this scope"错误

这个问题在这里已经有了答案:whyg++shows"gets()"notdeclared,evenafterincluding(3个答案)关闭2年前。使用以下代码,我得到“gets()未在此范围内声明”错误:#include#includeusingnamespacestd;intmain(){//stringstr[]={"Iamaboy"};stringstr[20];`gets(str);cout

c++ - 通过引用与通过值传递指向函数的指针,以及在指针链上使用 delete

假设我这样做:voidfunc(int*&refptr){*refptr=7;}int*ptr=newint;func(ptr);现在,如果我不使用引用运算符,在func中不会完成完全相同的事情吗?无论哪种方式,您都在堆中访问相同的int值,那么一种方式比另一种方式更可取吗?是否应该仅在您尝试更改指针...指向的位置时才使用引用运算符?我不清楚这一点,我的教授也没有帮助。:(我的另一个问题与删除运算符有关。假设我有:int**ptr=newint*;ptr*=newint;如果我想释放堆中分配的所有内存,我可以只对ptr使用delete一次,还是必须先删除ptr*然后再删除ptr?非常

c++ - dll 的 new 和 delete 运算符重载

如何为dll重载new和delete运算符。我已经将重载运算符作为dll的一部分编写,但是与此dll链接的客户端不使用overloadednewanddelete 最佳答案 这是C++标准在第17.6.4.6/3节中对此的说明:Theprogram'sdefinitions(ofthenew/deleteoperators)areusedinsteadofthedefaultversionssuppliedbytheimplementation.Suchreplacementoccurspriortoprogramstartup.T

c++ - std::runtime_error 子类的 "call to deleted constructor of"编译器错误

我从std::runtime_error派生了一个异常类,以便添加对异常流的支持。我收到一个奇怪的编译器错误输出,我不确定如何解决?clang++-std=c++11-stdlib=libc++-g-Wall-I../-I/usr/local/includeMain.cpp-cMain.cpp:43:19:error:calltodeletedconstructorof'EarthException'throwEarthException(__FILE__,__LINE__)^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~../EarthExce

c++ - c++ 中的 malloc/free 和 new/delete 兼容性?

malloc/free和new/delete有一个很好的比较here,以及malloc()和free()如何工作的很好的解释here.显然,我们不会混合使用它们-将free与new一起使用或将delete与malloc一起使用。我们可以看到很多开源项目,有很多贡献者,使用这两种机制,同时遵守上述“禁止混合”规则。通常,您在一个文件中只有一种方式(一位作者,一种偏好)。我已经fork了这样一个项目,我正在使用new/delete添加一些功能。但是我遇到了一些奇怪的内存损坏。当然,我可能对他们负责,但是.....这让我问了一些“幼稚”的问题:我可以在同一个编译单元(*.o)中同时使用mal

c++ - CMake 测试 : was a library compiled/linked against libc++ or libstd++?

我正在使用cmake来管理我使用第三方库的项目。此库可能已针对libc++或libstd++(取决于版本)进行编译/链接。我知道如何告诉cmake将我的项目编译/链接到libc++或libstdc++,但我不知道如何检查我正在使用的库是否是根据libc++或libstd++编译/链接的。有任何cmake命令可以检查吗? 最佳答案 对于共享库,您可以使用GetPrerequisites用于测试库是否依赖于libstc++或libc++的标准模块。例如,以下代码测试boost的program_options库是否针对libstc++或l

c++ - 在什么情况下 delete 运算符会抛出错误?

在我的链表实现中,删除内部类Node实例的辅助函数deleteNode(Node*)抛出运行时错误,通过“触发断点”在VS2015的本地Windows调试器中。我小心地匹配我的new和delete运算符。范围/引用是否发挥了我没有意识到的作用?即使clear()中存在逻辑错误并且deleteNode()被传递给nullptr,它也不应该抛出错误删除nullptr,然后将nullptr赋值给自己吧?该删除有什么问题?classLinkedList{public:LinkedList():head(nullptr){}~LinkedList(){clear();}voidpush_fron

c++ - 复制初始化: why move or copy constructor was not called even if copy-elision is turned off?

我的问题不同,因为我可能“知道”复制省略。我正在学习复制初始化。但是,以下代码让我感到困惑,因为我已经使用-fno-elide-contructors-O0选项关闭了复制省略。#includeusingnamespacestd;classtest{public:test(inta_,intb_):a{a_},b{b_}{}test(consttest&other){cout我首先使用命令构建:g++-std=c++11-fno-elide-constructors-O0main.cpp-omain得到如下结果:**showelideconstructors**moveconstruct

c++ - delete[] 运算符是否处理通过指针返回的动态分配的内存?

我想知道delete[]运算符如何处理函数返回的指针,而不是在与delete语句相同的范围内进行动态分配。假设我有一个像这样的简单函数:int*getArray(){int*returnVal=newint[3];returnVal[0]=returnVal[1]=returnVal[2]=0;returnreturnVal;}现在,当我需要在代码中使用该数组时,我会执行以下操作:int*vals=getArray();//usevalues...delete[]vals;但是,我想知道,C++编译器如何知道分配的内存块有多大(以及要从vals中删除多少内存元素)?这是一种有效的技术,

c++ - 为什么这个无锁堆栈类中的 'deleting' 节点会导致竞争条件?

在AnthonyWilliams的《C++ConcurrencyinAction》一书中,第7.2.1节列出了一个无锁堆栈实现:templateclasslock_free_stack{structnode{shared_ptrdata_;node*next_;node(constT&data):data_(make_shared(data)){}};atomichead_;public:voidpush(constT&data){node*new_node=newnode(data);new_node->next_=head_.load();while(!head.compare_e