草庐IT

atomic_shared_ptr

全部标签

c++ - 返回 shared_ptr<> 的成员函数的 const 正确性

如果我有课classfoo{private:std::shared_ptrm_data;public:std::shared_ptrGetData(){returnm_data;}}我相信std::shared_ptr应该转换为std::shared_ptr并共享同一个对象,但函数的const正确性是什么?IE这是有效的吗?std::shared_ptrGetData()const; 最佳答案 函数会修改对象的内部状态吗?没有。*函数是否允许其调用者(或其他外部环境)修改访问对象的内部状态?没有。这意味着将其标记为const是安全的

c++ - 返回 shared_ptr<> 的成员函数的 const 正确性

如果我有课classfoo{private:std::shared_ptrm_data;public:std::shared_ptrGetData(){returnm_data;}}我相信std::shared_ptr应该转换为std::shared_ptr并共享同一个对象,但函数的const正确性是什么?IE这是有效的吗?std::shared_ptrGetData()const; 最佳答案 函数会修改对象的内部状态吗?没有。*函数是否允许其调用者(或其他外部环境)修改访问对象的内部状态?没有。这意味着将其标记为const是安全的

c++ - 在 std::make_shared 中使用 c++ 聚合初始化

根据我的理解,以下代码构造了一个Foo类型的对象,然后将该对象移动到std::make_shared分配的内存中structFoo{std::strings;inti;charc;};intmain(intargc,char*argv[]){autofoo=std::make_shared(Foo{"hello",5,'c'});}有没有可能aggregateinitializeFoo直接放入std::make_shared分配的内存? 最佳答案 您可以使用可变参数构造函数模板创建一个适配器来转发参数,例如:templatestru

c++ - 在 std::make_shared 中使用 c++ 聚合初始化

根据我的理解,以下代码构造了一个Foo类型的对象,然后将该对象移动到std::make_shared分配的内存中structFoo{std::strings;inti;charc;};intmain(intargc,char*argv[]){autofoo=std::make_shared(Foo{"hello",5,'c'});}有没有可能aggregateinitializeFoo直接放入std::make_shared分配的内存? 最佳答案 您可以使用可变参数构造函数模板创建一个适配器来转发参数,例如:templatestru

c++ - `weak_ptr::expired` 对象 dtor 中的行为

考虑以下代码:#include#includeusingnamespacestd;classT;std::weak_ptrwptr;classT{public:T(){}~T(){std::cout();wptr=ptr;std::cout在这段代码中,我试图找出weak_ptr是否在对象销毁阶段过期。似乎是这样。输出是:notexpiredindtorexpired我使用gcc-5.1和ideone.现在,我有另一个问题。我找不到任何说明这是标准行为的文档。是否保证以这种方式工作,总是? 最佳答案 Now,Ihaveanother

c++ - `weak_ptr::expired` 对象 dtor 中的行为

考虑以下代码:#include#includeusingnamespacestd;classT;std::weak_ptrwptr;classT{public:T(){}~T(){std::cout();wptr=ptr;std::cout在这段代码中,我试图找出weak_ptr是否在对象销毁阶段过期。似乎是这样。输出是:notexpiredindtorexpired我使用gcc-5.1和ideone.现在,我有另一个问题。我找不到任何说明这是标准行为的文档。是否保证以这种方式工作,总是? 最佳答案 Now,Ihaveanother

c++ - std::shared_timed_mutex 上的共享锁可以升级为独占锁吗?

新的std::shared_timed_mutex允许两种类型的锁:共享锁和排他锁。如果一个人持有共享锁,有没有办法将它原子交换(“升级”)为独占锁?换句话说,给定以下代码,我怎样才能避免非原子丢弃和重新锁定?std::shared_timed_mutexm;//Guardsastd::vector.m.lock_shared();//Readfromvector.(Sharedlockissufficient.)//...//Nowwewanttowritetothevector.Weneedanexclusivelock.m.unlock_shared();//理想情况下,m.un

c++ - std::shared_timed_mutex 上的共享锁可以升级为独占锁吗?

新的std::shared_timed_mutex允许两种类型的锁:共享锁和排他锁。如果一个人持有共享锁,有没有办法将它原子交换(“升级”)为独占锁?换句话说,给定以下代码,我怎样才能避免非原子丢弃和重新锁定?std::shared_timed_mutexm;//Guardsastd::vector.m.lock_shared();//Readfromvector.(Sharedlockissufficient.)//...//Nowwewanttowritetothevector.Weneedanexclusivelock.m.unlock_shared();//理想情况下,m.un

c++ - std::make_shared() 是否使用自定义分配器?

考虑thiscode:#include#includeclassSomeClass{public:SomeClass(){std::coutptr1(newSomeClass);std::coutptr2(std::make_shared());std::cout这是它的输出:CustomnewSomeClass()Anotherone...SomeClass()Done!~SomeClass()~SomeClass()Customdelete显然,std::make_shared()没有调用new运算符——它使用的是自定义分配器。这是std::make_shared()的标准行为吗?

c++ - std::make_shared() 是否使用自定义分配器?

考虑thiscode:#include#includeclassSomeClass{public:SomeClass(){std::coutptr1(newSomeClass);std::coutptr2(std::make_shared());std::cout这是它的输出:CustomnewSomeClass()Anotherone...SomeClass()Done!~SomeClass()~SomeClass()Customdelete显然,std::make_shared()没有调用new运算符——它使用的是自定义分配器。这是std::make_shared()的标准行为吗?