草庐IT

unsafe_guard

全部标签

c++ - 编译器错误 : Function call with parameters that may be unsafe

得到了一些不是我的代码并且它产生了这个警告atm:iehtmlwin.cpp(264):warningC4996:'std::basic_string::copy':Functioncallwithparametersthatmaybeunsafe-thiscallreliesonthecallertocheckthatthepassedvaluesarecorrect.Todisablethiswarning,use-D_SCL_SECURE_NO_WARNINGS.SeedocumentationonhowtouseVisualC++'CheckedIterators'with[_

c++ - 第一次锁定和创建 lock_guard(adopt_lock) 和创建 unique_lock(defer_lock) 和锁定有什么区别?

我找到了以下两段代码:http://en.cppreference.com/w/cpp/thread/lockvoidassign_lunch_partner(Employee&e1,Employee&e2){//usestd::locktoacquiretwolockswithoutworryingabout//othercallstoassign_lunch_partnerdeadlockingus{//misthestd::mutexfieldstd::unique_locklk1(e1.m,std::defer_lock);std::unique_locklk2(e2.m,st

c++ - 为什么包括 guard ?

包括guard,定义为here,用于防止在编译时两次加载相同的代码。为什么我的编译器(GCC)无法检测到它两次加载相同的代码并具有合理的默认行为? 最佳答案 仅仅是因为您可能希望编译器加载该文件两次。请记住,#include只是加载一个文件并将其内容放在指令的位置。该文件可能是头文件,但也可能是有用且经常使用的源代码。大多数现代编译器都会对#pragmaonce使用react,完全按照您的意愿行事。但请记住,这是一个未包含在语言规范中的编译器扩展,并且坚持包含保护通常是一个好主意-您可以肯定,它适用于每个编译器和任何情况。

c++ - 我在哪里可以为我的 C++ 项目找到一个好的 Scope Guard 实现?

我最近刚刚了解了ScopeGuardC++习语。不幸的是,我找不到任何好的实现。谁能给我指点C++中一些好的和可用的ScopeGuard实现?谢谢,博达·赛多。 最佳答案 原始的ScopeGuard类包含在thisDr.Dobb'sarticle中AndreiAlexandrescu和PetruMarginean。一个稍微改进的版本,与JoshuaLehrer的一些更改可用here.(Lehrer的版本是我在项目中使用的版本。)它也包含在Loki中。图书馆。Boost现在有一个ScopeExit比ScopeGuard更强大的库(因为

c++ - 警告 C4996 : This function or variable may be unsafe -- compared to GCC on POSIX

我注意到MS编译器会为cstdlib函数(如getenv)发出“已弃用”警告。MS发明了自己的标准,例如_dupenv_s。问题1AFAIK主要的“不安全”事情是关于重入*。既然MS的CRT被标记为“多线程”(/MT),他们为什么不直接将getenv替换为可重入的线程安全版本呢?是否有人会依赖不安全的行为?问题2我用GCCg++-Wall-Wextra-Weff++-pedanticfoo.cpp编译了相同的代码,它不会产生任何警告。所以我想这在POSIX上不是问题吗?这是如何解决的?(好吧,也许他们只是改变了getenv的行为,很高兴能得到确认。*说它只是关于可重入性是一种过度概括。

c++ - 编译时出现错误 "fopen' : This function or variable may be unsafe.

这个问题在这里已经有了答案:fopendeprecatedwarning(10个回答)关闭8年前。编译时收到此错误:'fopen':Thisfunctionorvariablemaybeunsafe.Considerusingfopen_sinstead.Todisabledeprecation,use_CRT_SECURE_NO_WARNINGS.我是C++新手并打开CV,因此请帮助我摆脱这个错误。谢谢void_setDestination(constchar*name){if(name==NULL){stream=stdout;}else{stream=fopen(name,"w"

c++ - 为什么 std::lock_guard/std::unique_lock 不使用类型删除?

为什么要std::lock_guard和std::unique_lock需要将锁类型指定为模板参数吗?考虑以下替代方案。首先,在detail命名空间中,有类型删除类(非模板抽象基类和模板派生类):#include#include#include#includenamespacedetail{structlocker_unlocker_base{virtualvoidlock()=0;virtualvoidunlock()=0;};templatestructlocker_unlocker:publiclocker_unlocker_base{locker_unlocker(Mutex&

c++ - 如何摆脱 Visual Studio 中的 "unsafe"警告/错误(strcpy、sprintf、strdup)

我正在尝试消除一些编译器警告,这些警告说strcpy、sprintf等是不安全的。我明白为什么它们不安全,但我想不出一种修复代码的好方法,以C++风格。这是代码的摘录:extList->names[i]=(char*)malloc(length*sizeof(char));strcpy(extList->names[i],extName);//unsafe//strncpy(extList->names[i],extName,length);//alsounsafe这是消息:C4996:'strcpy':Thisfunctionorvariablemaybeunsafe.Conside

c++ - 命名包括 guard

C++包含守卫通常是如何命名的?我经常看到这个:#ifndefFOO_H#defineFOO_H//...#endif但是,我认为这不是很直观。如果没有看到文件名,很难分辨出FOO_H的用途以及它的名称所指的含义。什么是最佳实践? 最佳答案 我个人遵循Boost的建议。它可能是最大的高质量C++库集合之一,而且它们没有问题。它是这样的:__...____INCLUDED//include/pet/project/file.hpp#ifndefPET_PROJECT_FILE_HPP_INCLUDED这是:合法(注意以_[A-Z]开头

c++ - 将 std::lock_guard 与 try_lock 一起使用

有没有办法告诉std::lock_guard在获取互斥锁时调用try_lock而不是lock?我能想到的唯一方法是使用std::adopt_lock:if(!_mutex.try_lock()){//Handlefailureandreturnfromthefunction}std::lock_guardlock(_mutex,std::adopt_lock);是否有针对我的问题的内置解决方案,而不是显式获取锁,然后让lock_guard负责释放它? 最佳答案 lock_guard的一个基本设计不变性是它始终持有锁。这最大限度地减少