草庐IT

结束符

全部标签

c++ - 当一个函数结束时,它的局部变量会被释放吗?

如果不是,这是否意味着如果我想防止100%的内存泄漏,我必须通过删除所有局部变量来结束每个函数? 最佳答案 所有对象都有一个关联的存储期限。存储持续时间描述了对象的存储保留多长时间。非引用的局部变量会引入具有自动存储持续时间的对象,这意味着这些对象的存储在其作用域结束时会自动销毁。引用类型变量不引入对象,甚至可能不需要存储它们自己,但它们仍然具有存储持续时间(第3.7/3节)。如果引用确实需要存储,则会根据引用的存储时长释放。因此,任何类型的局部变量声明都不会泄漏。事实上,您不能delete具有自动存储期限的对象。这仅用于具有动态存

c++ - 哨兵和结束迭代器有什么区别?

在阅读EricNiebler的rangeproposal时,我遇到了哨兵一词来代替结束迭代器。我很难理解哨兵相对于结束迭代器的好处。有人能提供一个清晰的例子,说明哨兵带来的东西是标准迭代器对无法完成的吗?"Asentinelisanabstractionofapast-the-enditerator.SentinelsareRegulartypesthatcanbeusedtodenotetheendofarange.AsentinelandaniteratordenotingarangeshallbeEqualityComparable.Asentineldenotesaneleme

c++ - 判断静态初始化是否结束

删节题(Y)假设您需要从一个函数中知道该函数是否已作为静态对象初始化的一部分被调用。是否有标准或特定于平台的方法?背景故事(X)我对许多应用程序使用的DLL的源代码非常了解。此DLL公开了一个Init函数,该函数应构造一个boost::asio::deadline_timer以供以后使用(但DLL可以在没有它的情况下在降级模式下工作)。问题是在初始化静态对象(DLL加载时间)lestitsconstructordeadlock期间无法构造定时器。当然,每个人和他们的猫从任何地方(是的,多次!)调用Init,包括来self不会编辑的源代码的静态构造函数,因此需要检测这种情况并保释出去。在

c++ - 如何从开始和结束迭代器创建范围?

我有一个对象,它具有获取开始和结束迭代器的功能:const_iteratorerr_begin()constconst_iteratorerr_end()const因为它们没有被命名为begin和end,所以我无法将我的对象直接传递给range-v3中的函数。是否有一个简单的包装器可以让这个对象与range-v3库一起使用?例如:autohasErrors=!empty(something(x.err_begin(),x.err_end())); 最佳答案 听起来您正在寻找iterator_range:autohasErrors=!

c++ - 模拟基于范围的 for 循环的开始/结束行为

考虑基于范围的for循环begin-expr和end-expr的规范(N4140[stmt.ranged]/p1)。给定一个范围__range类型_RangeT,begin-exprandend-expraredeterminedasfollows:if_RangeTisanarraytype,begin-exprandend-exprare__rangeand__range+__bound,respectively,where__boundisthearraybound.If_RangeTisanarrayofunknownsizeoranarrayofincompletetype,

c++ - 用 }; 结束类定义中的函数是否是 C++ 中的语法错误?

此代码是我的老师提供给我的,作为C++类中的函数示例。我觉得很奇怪。我一直习惯于用}结束函数。我认为只有类定义以};结尾。这里函数定义以};结尾。类中的函数除了是公共(public)的还是私有(private)的之外,与独立函数有何不同?这只是C++的一个怪癖或特性吗?classGenericItem{public:voidSetName(stringnewName){itemName=newName;};voidSetQuantity(intnewQty){itemQuantity=newQty;};voidPrintItem(){cout 最佳答案

c++ - 使用 operator new/malloc 分配的内存块能否在程序执行结束后持续存在?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:WhenyouexitaCapplication,isthemalloc-edmemoryautomaticallyfreed?当我阅读有关在C/C++中的动态内存分配方面分别使用delete/free的强制性时,我想到了这个问题。我想如果内存分配在我的程序执行终止之后仍然存在,那么是的,它是强制性的;否则,我为什么要担心释放分配的空间?操作系统不会在进程终止时自动释放它吗?我有多正确?我的问题是可以int*ip=newint(8);在我的程序终止后仍然存在? 最佳答案

c++ - clang-format:类声明结束和命名空间关闭之间的空行

我使用clang-format来格式化我们的C++代码。我想在类声明和周围命名空间的右大括号之间有一个空行,如下所示:namespaceFoo{classBar{};}但是clang-format将我的代码更改为:namespaceFoo{classBar{};}它删除了类声明和命名空间的右大括号之间的空行。我的问题:有没有办法防止clang-format删除空行?这是我当前的clang格式配置:Language:CppAccessModifierOffset:-4AlignAfterOpenBracket:trueAlignConsecutiveAssignments:falseAl

c++ - STL C++ 中的结束迭代器是什么?

任何人都可以解释一下past-the-end是什么意思。为什么我们在结束时调用end()函数? 最佳答案 begin()和end()函数定义了一个半开范围([begin,end)),意思是:该范围包括第一个元素但不包括最后一个元素。因此,名称超过了结尾。半开范围的优点是:它避免了对空范围的特殊处理。对于空范围,begin()等于end().它使遍历元素的循环的结束标准变得简单:循环简单只要未达到end()就继续 关于c++-STLC++中的结束迭代器是什么?,我们在StackOverfl

c++ - 在 C++ 中重置 ifstream 对象的文件结束状态

我想知道是否有办法在C++中重置eof状态? 最佳答案 对于文件,您可以搜索到任何位置。例如,要倒回到开头:std::ifstreaminfile("hello.txt");while(infile.read(...)){/*...*/}//etcetcinfile.clear();//clearfailandeofbitsinfile.seekg(0,std::ios::beg);//backtothestart!如果您已经阅读到最后,则必须按照@JerryCoffin的建议使用clear()重置错误标志。