STL中有一些以make_前缀开头的函数,如std::make_pair、std::make_shared、std::make_unique等。为什么使用它们而不是简单地使用构造函数更好?autopair2=std::pair(1,2.0);autopair3=std::make_pair(1,2.0);std::shared_ptrpointer1=std::shared_ptr(newint(10));std::shared_ptrpointer2=std::make_shared(10);我只是看到这些函数使代码更短,但仅此而已吗?还有其他优势吗?这些功能使用起来更安全吗?
STL中有一些以make_前缀开头的函数,如std::make_pair、std::make_shared、std::make_unique等。为什么使用它们而不是简单地使用构造函数更好?autopair2=std::pair(1,2.0);autopair3=std::make_pair(1,2.0);std::shared_ptrpointer1=std::shared_ptr(newint(10));std::shared_ptrpointer2=std::make_shared(10);我只是看到这些函数使代码更短,但仅此而已吗?还有其他优势吗?这些功能使用起来更安全吗?
所以在Qt中编程时,我喜欢尽可能使用Qt实现。据我所知,没有Qt版本的std::unique_ptr还是有?如果Qt不存在,那么在Qt中产生“相同”结果的替代方案是什么? 最佳答案 Qt等价于std::unique_ptr是QScopedPointer.由于不支持移动语义,它的用处明显减少,使其更接近C++03std::auto_ptr的实用性(Whyisauto_ptrbeingdeprecated?)。 关于C++Qtstd::unique_ptrQt版本在哪里?,我们在StackO
所以在Qt中编程时,我喜欢尽可能使用Qt实现。据我所知,没有Qt版本的std::unique_ptr还是有?如果Qt不存在,那么在Qt中产生“相同”结果的替代方案是什么? 最佳答案 Qt等价于std::unique_ptr是QScopedPointer.由于不支持移动语义,它的用处明显减少,使其更接近C++03std::auto_ptr的实用性(Whyisauto_ptrbeingdeprecated?)。 关于C++Qtstd::unique_ptrQt版本在哪里?,我们在StackO
C++11的std::shared_ptr提供了一种bool运算符。operatorunspecified-bool-type()const;(由于bool类型的dangersfromimplicitcasting,它不是一个直接的operatorbool()const。)为什么std::weak_ptr没有类似的运算符?我发现自己经常打字if(!wp.expired())当我想打字时if(wp)为什么weak_ptr没有bool转换? 最佳答案 if(!wp.expired())在多线程代码中几乎总是错误检查,因为直接在if语句之
C++11的std::shared_ptr提供了一种bool运算符。operatorunspecified-bool-type()const;(由于bool类型的dangersfromimplicitcasting,它不是一个直接的operatorbool()const。)为什么std::weak_ptr没有类似的运算符?我发现自己经常打字if(!wp.expired())当我想打字时if(wp)为什么weak_ptr没有bool转换? 最佳答案 if(!wp.expired())在多线程代码中几乎总是错误检查,因为直接在if语句之
标题几乎概括了我的问题。为什么不能做以下检查空指针?auto_ptrp(some_expression);//...if(!p)//error必须改为这样做:if(!p.get())//OK为什么不auto_ptr只需拥有operator!()定义? 最佳答案 它的设计似乎有错误。这将在C++0x中修复。unique_ptr(替换auto_ptr)包含explicitoperatorbool()const;引用新C++标准:Theclasstemplateauto_ptrisdeprecated.[Note:Theclasstemp
标题几乎概括了我的问题。为什么不能做以下检查空指针?auto_ptrp(some_expression);//...if(!p)//error必须改为这样做:if(!p.get())//OK为什么不auto_ptr只需拥有operator!()定义? 最佳答案 它的设计似乎有错误。这将在C++0x中修复。unique_ptr(替换auto_ptr)包含explicitoperatorbool()const;引用新C++标准:Theclasstemplateauto_ptrisdeprecated.[Note:Theclasstemp
此代码片段有效吗?:unique_ptrp(newA());p=nullptr;也就是说,我可以将nullptr分配给unique_ptr吗?还是会失败?我用g++编译器尝试了这个,它成功了,但是其他编译器呢? 最佳答案 它会起作用。来自C++11标准的第20.7.1.2.3/8-9段关于unique_ptr类模板:unique_ptr&operator=(nullptr_t)noexcept;Effects:reset().Postcondition:get()==nullptr这表示类模板的定义unique_ptr包含opera
此代码片段有效吗?:unique_ptrp(newA());p=nullptr;也就是说,我可以将nullptr分配给unique_ptr吗?还是会失败?我用g++编译器尝试了这个,它成功了,但是其他编译器呢? 最佳答案 它会起作用。来自C++11标准的第20.7.1.2.3/8-9段关于unique_ptr类模板:unique_ptr&operator=(nullptr_t)noexcept;Effects:reset().Postcondition:get()==nullptr这表示类模板的定义unique_ptr包含opera