草庐IT

SOME_UNIQUE_VALE

全部标签

c++ - 为继承 enable_shared_from_this 的类获取 unique_ptr

通常我更喜欢从工厂返回unique_ptr。最近我遇到了为继承enable_shared_from_this的类返回unique_ptr的问题。此类的用户可能会意外调用shared_from_this(),尽管它不属于任何shared_ptr,这会导致std::bad_weak_ptr异常(或C++17之前的未定义行为,通常作为异常实现)。代码的简单版本:classFoo:publicenable_shared_from_this{stringname;Foo(conststring&_name):name(_name){}public:staticunique_ptrcreate(c

c++ 我可以将 std::unique_ptr 与依赖注入(inject)一起使用吗?

我一直在使用原始指针进行依赖注入(inject),因此我决定将我的代码转换为使用shared_ptr。这行得通,但我想知道我是否可以改用unique_ptr?在我下面的示例中,MyClass将管理信用卡服务的生命周期。classPaymentProcessor{PaymentProcessor(??creditCardService)::creditCardService_(creditCardService){}private:CreditCardService*creditCardService_;}classMyClass{public:voidDoIt(){creditCard

c++ - 使用挂起的 read_async_some 关闭 boost::asio::serial_port

我正在链接read_async_some()调用以从串行端口异步读取。在某些时候,我需要取消异步读取并在关联的处理程序中检测到这一事实。来自thedocumentationforcancel(),我希望通过检查传递给我的处理程序的error_code来做到这一点:Thisfunctioncausesalloutstandingasynchronousreadorwriteoperationstofinishimmediately,andthehandlersforcancelledoperationswillbepassedtheboost::asio::error::operatio

c++ - 使用 unique_ptr 离开范围时堆损坏

我遇到了类似于voidpointerreturnedfromfunctionheapcorruption的问题相似之处在于,当我离开使用unique_ptr的范围时,会收到“堆损坏”消息。这里是代码:voidCMyClass::SomeMethod(){std::unique_ptrspMyInterface;spMyInterface.reset(newCMyInterfaceObject());//CMyInterfaceObjectisderivedfromIMyInterfaceany_list.push_back(spMyInterface.get());//any_list

c++ - boost asio async_read_some 只读取数据片段

我有一个使用boost::asio进行读/写操作的C++服务器-写出消息工作正常-但由于某种原因我无法读取工作我从客户端发送给它的消息是1516位无符号短裤-我的测试消息是这样的:1,34,7,0,0,0,0,0,4,0,0,0,0,0,0现在在服务器上我经常看到这样的事情。读取通常被分解和/或乘以256这是一次发送两次readinglength=8:[134700000]readinglength=3:[102400]readinglength=3:[000]readinglength=8:[134700000]readinglength=6:[102400000]这是第二次发送两次

c++ - unique_ptr 成员,私有(private)复制构造函数与移动构造函数

给定多个派生类的基类,目标是创建一个包装类,允许STL容器查看具有基接口(interface)的对象,尽管实际上可能会将不同的派生类添加到容器中。(参见Retrievedatafromheterogeneousstd::list)。经过一些修补,我提出了一个新的派生类,它是对基类的unique_ptr的包装。但是,移动构造函数让我感到困惑。classBase{friendclassBaseWrapper;virtualBase*clone()const=0;public:virtual~Base(){}//...publicinterface};classDerived:publicB

c++ - unique_ptr 用法 - 类图

谁能帮我用下面的代码来显示类对象的内容?Q1-任何人都可以确认-这是否是在map中存储指向表类对象的指针的正确方法?Q2-如何输出map中整条记录的内容?谢谢#include#include#include#includeclassTable{public:intc1,c2,c3;Table(){}Table(int_c1,int_c2,int_c3){c1=_c1;c2=_c2;c3=_c3;}};intmain(){std::map>mapTable;std::unique_ptrup(newTable(1,2,3));//Isthiscorrectwaytostorethepoi

c++ - 在没有 C++11 的情况下使用 unique_ptr

这个问题在这里已经有了答案:unique_ptrboostequivalent?(5个答案)关闭7年前。我想将指向d的指针从一个容器传递到下一个容器。在任何时候都不会有超过一个指针的所有者(或d本身)。我希望当最后一个指针超出范围时,自动调用deleted。在C++11中,我将使用unique_ptr来完成此操作。但是,唉,我不能使用C++11。C++中最好的等价物是什么?升压就好了或者,如果没有,处理此问题的适当方法是什么?

c++ - 是否可以使用填充构造函数创建 std::vector<std::unique_ptr<Bar>> ?

我有一个Foo类,其成员变量类型为std::vector>,我想填写这个类的构造函数的初始化列表。这可能吗?我希望可以使用vector的填充构造函数,就像这样Foo::Foo(intn):vector>(n,unique_ptr(newBar)){}但我认为这需要std::unique_ptr的复制构造函数,它被删除了(因为它应该被删除)(unique_ptr(constunique_ptr&)=delete)。有没有更好的方法来解决这个问题? 最佳答案 既然不可复制,那就搬吧!硬编码对象的解决方案:#include#include

c++ - 提供给 std::unique_ptr 的简单自定义删除器 lambda:为什么使用引用捕获默认值 ([&]) 而不是非捕获 ([])?

背景Cppreference:ssectiononstd::unique_ptr显示以下演示,用于向unique_ptr提供自定义删除器实例:std::unique_ptr>p(newD,[&](D*ptr){std::cout在哪里D,就这个问题而言,就像简单的自定义类型一样,比如structD{D(){std::cout此外,上面的引用说明了删除器的以下类型要求:TyperequirementsDeletermustbeFunctionObjectorlvaluereferencetoaFunctionObjectorlvaluereferencetofunction,callab