草庐IT

gray8_ptr_t

全部标签

c++ - 不从源函数返回的类中的 auto_ptr

考虑以下代码:#includestructA{std::auto_ptri;};AF(){Aa;returna;}intmain(intargc,char**argv){Aa=F();return0;}编译时我收到一个编译错误,(参见here):error:nomatchingfunctionforcallto‘A::A(A)’Aa=F();^据我了解,A::A(A)甚至不允许存在,那么编译器为什么要请求它呢?其次,为什么不使用RVO?如果是因为std::auto_ptr不能从函数中返回,为什么下面会编译运行?#includestd::auto_ptrF(){std::auto_ptr

c++ - 在调试器中查看 C++ shared_ptr 内容

在xcode中调试C++代码,有没有办法查看std::shared_ptr的内容?如果我查看“监视”窗口,我只能看到__ptr=(element_type*)0xa66945c在即时窗口中写'pomyPointer'也只打印内存地址。我还尝试了“查看“__ptr_”的内存”和“查看“*__ptr_”的内存”,但它只让我看到了原始内存,没有实际可读的文本任何人都可以建议一种方法来查看我有指针的对象吗? 最佳答案 LLDB中的fr命令有一个--ptr-depth参数,在这些情况下可以提供帮助。例如,尝试在直接Pane中键入以下内容:fr

c++ - 为什么在锁定 weak_ptr 时会出现访问冲突?

我有一个std::weak_ptr。在尝试使用底层对象之前,我锁定它以获得shared_ptr:autofoo_sharedptr=foo_weakptr.lock();if(foo_sharedptr!=nullptr){//dostuffwithfoo}通常这很好用。但是,有时我在锁定调用期间遇到访问冲突:Unhandledexceptionat0x00007FF91F411BC3(My.dll)inMy.exe:0xC0000005:Accessviolationreadinglocation0xFFFFFFFFFFFFFFFF.我的猜测是底层指针被删除了,但是我对weak_pt

c++ - 为什么我不能用 reset() 删除 unique_ptr<char[]>?

当我有一个指向单个对象的唯一指针时,我可以用reset()删除它:std::unique_ptrvariable(newchar);variable.reset();但是,这不适用于std::unique_ptr包含一个数组。为什么?删除此类指针的正确方法是什么?我正在使用EmbarcaderoC++Builder10.1。相关标准是C++11。我的观察当我有一个包含数组的唯一指针时,编译失败:std::unique_ptrvariable(newchar[10]);variable.reset();错误信息是nomatchingfunctiontocallfor'reset'.这也失

c# - C# 和 C++ 应用程序之间的 map 和 shared_ptr 序列化?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Binaryserialization/de-serializationinC++andC#我正在开发一个项目,其中服务器是用C++编写的(boost被广泛使用),客户端应用程序是用C#编写的。我在客户端/服务器之间序列化/反序列化消息时遇到问题。我研究了各种替代库来实现这种跨平台序列化,ProtocolBuffers似乎是最好的...但它不支持标准库的map容器的序列化和boost::shared_ptr。那么我的问题是:谁能解释一下map和boost::shared_ptr是如何使用ProtocolBuf

c++ - 使用 shared_ptr 和 weak_ptr 来管理 std::function 的生命周期是否安全?

我已经围绕boost::asio::io_service创建了一个包装器来处理OpenGL应用程序的GUI线程上的异步任务。任务可能是从其他线程创建的,因此boost::asio似乎是这个目的的理想选择,这意味着我不需要编写自己的带有关联互斥锁和锁定的任务队列。我想将每帧完成的工作保持在可接受的阈值以下(例如5毫秒),所以我调用poll_one直到超出所需的预算,而不是调用run.据我所知,这需要我调用reset每当发布新任务时,这似乎运作良好。因为它很短,这里是全部内容,没有#include:typedefstd::functionVoidFunc;typedefstd::share

c++ - 将 std::shared_ptr 与 protected 构造函数\析构函数一起使用

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:HowdoIcall::std::make_sharedonaclasswithonlyprotectedorprivateconstructors?我想创建一个指向类的共享指针,并有一个返回它的工厂方法,同时保护构造函数/析构函数。由于共享指针无法访问构造函数或析构函数,因此出现编译错误。我正在使用llvm4.1,但我正在寻找一种可以独立于编译器的解决方案(除了公开构造函数\析构函数之外)。这是一个代码示例:classFoo{public:staticstd::shared_ptrgetSharedPoin

c++ - 线程安全的 unique_ptr move

是否可以使用C++11原子操作安全地moveunique_ptr?目前我有这样的代码std::unique_ptrDataManager::borrowSyncToken(){std::unique_locksyncTokenLock(syncTokenMutex);returnstd::move(syncToken);}我想知道是否有更优雅的方式,比如简单地声明:std::atomic>syncToken;并避免互斥量的需要。或者我可能根本不需要关心这里的锁并且std::move已经是原子的了?经过到目前为止的研究,在我看来:std::move本身不是原子的,需要有一些同步,否则2个

c++ - 为什么 intrusive_ptr 和 shared_ptr 不能与 boost::intrusive 容器一起使用?

boost::intrusive文档描述了如何youcanusesmartpointerswithintrusivecontainers但接着说你不能使用你最有可能使用的智能指针,“它必须具有与原始指针相同的所有权语义。这意味着资源管理智能指针(如boost::shared_ptr)不能被使用。”这是为什么?我想不出任何明显的理由应该禁止它们。究竟什么会破坏?无论如何,侵入式容器不会管理其中元素的分配。就我而言,我想使用intrusive_ptr,但我看不出shared_ptr也不能工作的任何原因。编辑:明确地说,我的意思是Hook指针(例如侵入式单链表中的下一个指针)是一个智能指针。

c++ - 如何将 boost::shared_ptr<T> 后面的完整对象深度复制到指向新位置的 shared_ptr?

如何在boost::shared_ptr后面复制完整对象:是否有memcopy选项(只创建内存克隆),或者我们应该创建复制构造函数? 最佳答案 您需要一个复制构造函数或一个将执行深复制的operator=。boost::shared_ptr无法知道您的对象的结构来为您执行此操作。“内存克隆”操作也不能。当然,这仅适用于需要明确定义的复制构造函数/operator=的对象,而“普通”的对象会进行浅拷贝。 关于c++-如何将boost::shared_ptr后面的完整对象深度复制到指向新位置