草庐IT

enable-shared

全部标签

c++ - 转发没有类声明的 shared_ptr

注意:我发现错误的来源实际上与shared_ptr无关,只是在错误消息中巧妙地伪装成这样。因此下面基本上是废话(不是答案,他们很好)--我在使用shared_ptr(目前正在boost)时遇到了一些问题,我需要简单地将指针转发到另一个函数。使用native指针,干预函数不需要访问类的定义,但使用smart_ptr似乎可以访问。有什么办法可以避免这种情况吗?例如,给定一个目标函数:voidfunc(shared_ptrconst&obj)const&解决了部分问题,但是假设我们有一个getter类,它为其他类获取对象,例如:shared_ptrsomeClassInstance();这里

c++ - 为什么 std::shared_ptr 使用原子 cpu 操作

我无法理解为什么shared_ptr使用原子cpu指令...我无法找出原因,因为它不是线程安全的。有人可以解释一下吗。如果你想知道我是怎么知道它使用原子结构的:有一段来自C++的剪辑以及Herb和Andrei谈论它的地方,但他们从未提及为什么会这样。 最佳答案 shared_ptr的任何实例都是多线程安全的。它指向的数据不是多线程安全的。参见this.如果正确应用原子指令(通过竞争线程访问以相同顺序完成保护)是实现线程安全的一种方法。另一种方法是使用互斥体。查看BOOST的类似问题:Isboostshared_ptrxxxthrea

c++ - 使用 std::enable_if 作为模板时的默认模板参数。 param.: 为什么可以使用两个仅在 enable_if 参数上不同的模板函数?

在languagereferenceofstd::enable_ifatcppreference包括以下注释NotesAcommonmistakeistodeclaretwofunctiontemplatesthatdifferonlyintheirdefaulttemplatearguments.Thisisillegalbecausedefaulttemplateargumentsarenotpartoffunctiontemplate'ssignature,anddeclaringtwodifferentfunctiontemplateswiththesamesignaturei

c++ - make_shared是否为每个成员变量做一个默认的初始化(零初始化)

将普通结构(或类)与普通旧数据类型和对象作为成员。请注意,没有定义默认构造函数。structFoo{intx;inty;doublez;stringstr;};现在,如果我在堆栈上声明一个实例f并尝试打印其内容:{Foof;std::cout结果是为x、y和z打印的垃圾数据。并且该字符串默认初始化为空。符合预期。如果我创建一个shared_ptr的实例使用make_shared并打印:{shared_ptrspFoo=make_shared();coutxyzstr那么,x、y、z都是0.这使得shared_ptr看起来在构造对象实例后对每个成员执行默认初始化(零初始化)。至少这是我在

c++ - shared_ptr 现实生活中的用例

shared_ptr将在我们希望拥有一个动态分配项目的多个所有者的情况下使用。问题是,我无法想象我们需要多个所有者的任何场景。我能想到的每个用例都可以用unique_ptr解决。有人可以提供一个现实生活中的用例示例,其中包含需要shared_ptr的代码(这里需要,我的意思是作为智能指针的最佳选择)?我所说的“现实生活”是指一些实用的用例,而不是过于抽象和虚构的东西。 最佳答案 在我们的模拟器产品中,我们使用一个框架在模拟组件(称为端点)之间传递消息。这些端点可以驻留在进程内的多个线程上,甚至可以驻留在模拟集群中的多台机器上,消息通

c - 我怎样才能 ENABLE_VIRTUAL_TERMINAL_PROCESSING?

前段时间我注意到有一个新的控制台模式ENABLE_VIRTUAL_TERMINAL_PROCESSING,我决定尝试一下。这是我的示例代码://File:test1.c#include#include#include#includeconstchar*constTEST_STRING="\x1B[31;1mRed\x1B[0m\x1B[32;1mGreen\x1B[0m\x1B[34;1mBlue\x1B[0m";voidErrorExit(constchar*errorMessage){puts(errorMessage);exit(1);}intmain(intargc,char*

c++ - ENABLE_VIRTUAL_TERMINAL_PROCESSING 和 DISABLE_NEWLINE_AUTO_RETURN 失败

重点是在终端中制作这款小型多人游戏,应用一些基本的图形概念来掌握它的工作原理及其背后的数学原理。请注意,我希望这样做是为了好玩,而且我完全知道有比使用终端更好的替代方法。我需要一个可以写入的控制台,所以重点是删除滚动条并将整个缓冲区打印到屏幕上。但是由于字符被写入到上一行末尾时的回车:这看起来很丑陋:在尝试了大约3个小时通过SetConsoleMode使其工作后,我不和谐地询问了它。我得到的答案是这样的:voidmain(){autoh=GetStdHandle(STD_OUTPUT_HANDLE);DWORDmode=0;GetConsoleMode(h,&mode);mode|=D

windows - 警告 : templates not found/share/git-core/templates | fatal: Unable to find remote helper for 'https'

我在尝试克隆github存储库时收到以下消息:gitclonehttps://github.com/twbs/bootstrap.gitCloninginto'test'...warning:templatesnotfound/share/git-core/templatesfatal:Unabletofindremotehelperfor'https'Windows8.1git版本1.8.5.2.msysgit.0在我的路径中:C:\ProgramFiles\Git\cmd;C:\ProgramFiles\Git\binhttp://windows.github.com/也安装在我的

windows - 在 Windows 中使用 git,git-init 的 --shared 选项有什么用吗?

我注意到,当在Windows上使用Git扩展来初始化它所做的裸存储库时gitinit--bare--shared=all我已经阅读了--shared选项的手册。设置文件夹权限似乎很方便,但描述非常UNIX-y(例如umask)。我的远程存储库将共享,但它们在Windows身份验证下的远程UNC共享上。那么,在我的情况下,是否需要这个--shared选项,例如,如果我从命令提示符初始化一个repo? 最佳答案 除了权限(在Windows中确实可能不起作用),使用--shared标志还设置了receive.denyNonFastForw

windows - CreateFile 如何以 FILE_SHARE_READ 失败并以 FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE 成功?

自己试试:创建一个XLS文件,在Excel中打开它。打开sysinternalsProcessMonitor,观察在资源管理器中复制XLS文件时发生的情况(只需按ctrl-cctrl-v)。连续两次调用::CreateProcess。第一次调用要求读取权限,并被拒绝访问。第二次调用要求读加写加删除并通过。这正常吗? 最佳答案 如果您使用FILE_SHARE_READ打开一个文件,您表示您愿意共享对该文件的访问权限,但仅限于读取。如果您使用所有标志打开,您也愿意共享写入/删除访问权限。FILE_SHARE_READ比FILE_SHAR