草庐IT

week_ptr

全部标签

C++ std::unique_ptr 从函数返回并测试 null

我有一个函数需要返回一个指向myClass类对象的指针。为此,我使用std::unique_ptr。如果函数成功,它应该返回一个指向带有数据的对象的指针。如果失败,它应该返回null。这是我的代码框架:std::unique_ptrgetData(){if(dataExists)...createanewmyClassobject,populateandreturnit...//Nodatafoundreturnstd::unique_ptr(null);//在main上:main(){std::unique_ptrreturnedData;returnedData=getData()

c++ - 使用 shared_ptr 时如何检测循环

shared_ptr是Boost库中的引用计数智能指针。引用计数的问题在于它不能处理循环。我想知道如何在C++中解决这个问题。请不要提出诸如“不要循环”或“使用weak_ptr”之类的建议。编辑我不喜欢只使用weak_ptr的建议,因为显然如果你知道你会创建一个循环,那么你就不会有问题。如果您在运行时生成shared_ptrs,您也无法知道在编译时会有一个循环。因此,请自行删除其中使用weak_ptr的答案,因为我特别要求不要提供此类答案... 最佳答案 shared_ptr表示所有权关系。而weak_ptr代表awareness。

c++ - 当你想实现一个可以返回 "nothing"的函数时,何时使用 boost::optional 以及何时使用 std::unique_ptr ?

据我了解,有两种方法可以实现有时不返回结果的函数(例如在ppl列表中找到的人)。*-我们忽略原始ptr版本,与bool标志配对,并在未找到版本时出现异常。boost::optionalfindPersonInList();或std::unique_ptrfindPersonInList();那么有什么理由比另一个更喜欢一个吗? 最佳答案 这取决于:您希望返回句柄还是拷贝。如果你想返回一个句柄:Person*boost::optional都是可接受的选择。我倾向于使用Ptr在空访问的情况下抛出的类,但这是我的偏执狂。如果您希望返回拷贝

c++ - 当在 std::list<shared_ptr> 的 C++14 初始化列表中间抛出时,GCC(但不是 Clang)下的内存泄漏

考虑以下程序:#include#include#include#includeclassFoo{public:Foo(){if(s_ct==0){throwstd::bad_alloc();}--s_ct;fprintf(stderr,"ctor%p\n",this);}~Foo(){fprintf(stderr,"dtor%p\n",this);}private:staticints_ct;};intFoo::s_ct=2;intmain(){try{std::list>l={std::make_shared(),std::make_shared(),std::make_shared

c++ - shared_ptr 如何提供 noexcept 分配?

std::shared_ptr如何提供noexceptoperator=?当然,如果这个shared_ptr是最后一个,那么它必须销毁它的内容,并且不能保证那个对象的析构函数不会抛出,或者原来使用的自定义删除器不会扔。 最佳答案 对我来说似乎是个缺陷,虽然我在activeissueslist中找不到一个(虽然#2104类似)。根据[C++11:20.7.2.2.3/1],赋值定义为等价于shared_ptr(r).swap(*this);但根据[C++11:20.7.2.2.2],~shared_ptr本身不是noexcept。除非

c++ - 将 std::unique_ptr 推回 std::vector 时编译器不会失败

一个unique_ptr不能被推回std::vector因为它是不可复制的,除非使用std::move.但是,如果F是一个返回unique_ptr的函数,那么std::vector::push_back(F())操作是允许的.下面有一个例子:#include#include#includeclassA{public:intf(){return_f+10;}private:int_f=20;};std::unique_ptrcreate(){returnstd::unique_ptr(newA);}intmain(){std::unique_ptrp1(newA());std::vect

python - Boost.Python:如何公开 std::unique_ptr

我对boost.python还很陌生,并试图将函数的返回值公开给python。函数签名如下所示:std::unique_ptrsomeFunc(conststd::string&str)const;在python中调用函数时,出现如下错误:TypeError:Noto_python(by-value)converterfoundforC++type:std::unique_ptr>我在python中的函数调用如下所示:a=mymodule.MyClass()a.someFunc("somestringhere")#errorhere我试图公开std::unique_ptr但无法让它工作

Java Calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY),它会向后滚动,向前滚动还是未知?

假设以下代码在2009年8月22日(星期六)执行Calendarc=Calendar.getInstance();c.set(Calendar.DAY_OF_WEEK,Calendar.SUNDAY);c.get(Calendar.DAY_OF_MONTH)将返回23。我感兴趣的条件是返回14(上周日,而不是下周日)。当设置DAY_OF_WEEK时,是否有任何与日历滚动DAY_OF_MONTH/YEAR的方向相关的规则?如果有,它们是什么? 最佳答案 它应该始终保持相同的WEEK_OF_MONTH(http://java.sun.c

[Week 19]每日一题(C++,数学,并查集,动态规划)

目录[Daimayuan]T1倒数第n个字符串(C++,进制)输入格式输出格式样例输入样例输出解题思路[Daimayuan]T2排队(C++,并查集)输入格式输出格式样例输入1样例输出1样例输入2样例输出2样例输入3样例输出3数据规模解题思路[Daimayuan]T3素数之欢(C++,BFS)数据规模输入格式输出格式样例输入样例输出说明解题思路[Daimayuan]T4国家铁路(C++,数学,动态规划)题目描述题目输入题目输出样例输入1样例输出1样例输入2样例输出2解题思路[Daimayuan]T5吃糖果(C++,贪心)输入格式输出格式数据范围输入样例输出样例解题思路[Daimayuan]T6

c++ - 通过传递指针的地址来初始化 std::unique_ptr

我正在创建一个与某些WindowsAPI代码互操作的类,现在我必须初始化的指针之一是通过调用初始化它的native函数来完成的。我的指针是std::unique_ptr类型,带有一个自定义删除器,它调用提供的WinAPI删除器函数,但是我不能将带有&地址运算符的unique_ptr传递给init函数.为什么?我创建了一个示例来演示我的问题:#includestructfoo{intx;};structcustom_deleter{};voidinit_foo(foo**init){*init=newfoo();}intmain(){std::unique_ptrfoo_ptr;init