草庐IT

具有 shared_ptr 成员的 C++ 复制构造函数

来自cplusplus.com:Rarelyyouwillcomeacrossaclassthatdoesnotcontainrawpointersyetthedefaultcopyconstructorisnotsufficient.Anexampleofthisiswhenyouhaveareference-countedobject.boost::shared_ptrisexample.有人可以详细说明一下吗?如果我们有一个包含boost::shared_ptr的类,当该类被复制构造时,不会得到复制构造-因此shared_ptr构造函数不会执行正确的事情并增加引用计数?例如,以下

c++ - 为什么 std::unique_ptr 重置与赋值不同?

我想知道为什么std::unique_ptrp=newMyClass;没有效果,但是std::unique_ptrp;p.reset(newMyClass);很好。我有点理解它们的不同之处,但我想知道为什么选择让它们不同。assignment和reset不一样有什么危险? 最佳答案 首先,std::unique_ptrp=newMyClass;不是赋值,是copyinitialization.它不起作用,因为constructorofstd::unique采用原始指针标记为explicit:explicitunique_ptr(po

c++ - 使用或不使用 C++0x 特性

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:HowareyouusingC++0xtoday?我正在与一个团队合作开发一个相当新的系统。我们正在谈论迁移到MSVC2010,我们已经迁移到GCC4.5。这些是我们唯一使用的编译器,我们没有计划在短期内将我们的代码移植到不同的编译器。我建议在我们这样做之后,我们开始利用一些已经提供的C++0x特性,比如auto。我的同事反对这一点,提议等到“C++0x真正成为标准”。我不得不不同意,但我可以从他措辞的方式中看出吸引力。尽管如此,我还是忍不住认为这种反驳更多是出于对学习C++0x的恐惧和恐惧,而不是对标准化的

c++ - 使用(和导出)boost::shared_ptr<T> 时出现错误 C2562

各位程序员好,我正在创建一个C++DLL库,我在其中使用了boost(1.55)的shared_ptr。然而,当我使用VisualStudio2013编译项目时,出现了一堆错误C2562:Error1errorC2562:'boost::shared_ptr::operator[]':'void'functionreturningavaluef:\developer\cplus\lib\boost_1_55_0\boost\smart_ptr\shared_ptr.hpp6631MEngineError2errorC2562:'boost::shared_ptr::operator[]

windows - Windows 上的 Openssl 错误 0x02001005 和 0x2006D002?

我正在尝试使用opensll将.cer证书转换为.p12证书。这是我正在使用的命令C:\OpenSSL-Win32\bin>opensslx509-informder-indeveloper_identity.cer-outdeveloper_identity.pem我经常遇到错误,但我不知道这是什么意思。我怎样才能弄清楚如何修复它。2104:error:02001005:systemlibrary:fopen:Input/outputerror:.\crypto\bio\bss_file.c:163:fopen('C:\OpenSSL-Win32\bin','rb')2104:err

c++ - 强制完整性级别值 0x2010 代表什么?

我在我的用户模式进程中运行以下代码片段,该进程在Windows用户帐户登录到工作站时启动。或者,换句话说,它的路径位于HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run注册表项中。代码应该确定mandatoryintegritylevel我的用户进程。它是这样的:DWORDgetMIL(){//Trytogetintegritylevel//-1Unknown//SECURITY_MANDATORY_UNTRUSTED_RID0x00000000Untrusted.//SECURITY_MANDATORY_L

c++ - 如何将 boost::shared_ptr 作为指向 Windows 线程函数的指针传递?

如何将boost::shared_ptr作为指向Windows线程函数的指针传递?假设以下代码:test::start(){...._beginthreadex(NULL,0,&test::threadRun,&shared_from_this(),0,&threadID);......}/*thisisastaticfunction*/UINT__stdcalltest::threadRun(LPVOIDlpParam){shared_ptrk=*static_cast*>(lpParam);...}我认为这段代码不正确,你的想法是什么?我该怎么做?编辑:我通过boost::weak

c++ - GlobalAddAtom() 在 Win7 上返回 0 和 GetLastError = 0x5,在 XP 上有效

简单代码:ATOMatom=GlobalAddAtom(L"TestCpp1");它返回0,GetLastError返回0x5(拒绝访问)。MSDN上没有关于它的内容。这是在Win7上。管理员权限没有区别。相同的代码适用于XP。AddAtom(本地)适用于Win7。这是什么原因造成的? 最佳答案 这是GUI还是控制台应用程序?您可能会尝试的一件事是在调用GlobalAddAtom之前显式调用LoadLibrary("User32")。这是对遇到类似问题的人的引用,在XP上这可能相关吗?http://www.tech-archive.

【C++】C++11——智能指针、内存泄漏、智能指针的使用和原理、RAII、auto_ptr、unique_ptr、shared_ptr、weak_ptr

文章目录C++117.智能指针7.1内存泄漏7.2智能指针的概念7.3智能指针的使用7.3.1auto_ptr7.3.2unique_ptr7.3.3shared_ptr7.3.4weak_ptrC++117.智能指针7.1内存泄漏  什么是内存泄漏:  内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。  内存泄漏通常由于程序在设计上的缺陷或错误,例如动态分配内存后,未在合适的时间或无法正确释放该段内存,而导致的。内存泄漏通常需要程序员通过分析程序源代码

c++ - ConnectNamedPipe 和 asio overlapped ptr

我命名了使用boostasio编写的管道服务器。服务器创建命名管道并调用ConnectNamedPipe将asiooverlappedptr传递给它。问题是传递给重叠的asio的完成处理程序从未被调用,即在客户端调用CreateFile不会触发传递给ConnectNamedPipe的完成处理程序。我做错了什么?这里是客户端和服务器的完整列表:#define_WIN32_WINNT0x0501#include#include#include#include#include#include#include#include#includestaticconstuint32_tPIPE_OUT