我有一个基类及其子类:classBase{public:virtualvoidhi(){cout尝试创建一个辅助函数来创建一个Derived对象的唯一指针。1)这个有效:std::unique_ptrGetDerived(){returnstd::make_unique();}2)但是,这个编译失败:std::unique_ptrGetDerived2(){autoa=std::make_unique();returna;}3)std::move有效:std::unique_ptrGetDerived3(){autoa=std::make_unique();returnstd::mov
在下面的代码中函数f()可以调用operatorbool()和operator*()unique_ptr的成员函数对于不完整的classC.但是当函数g()尝试为unique_ptr>调用相同的成员函数,编译器突然想要一个完整的类型并尝试实例化X,然后失败。由于某种原因unique_ptr>::get()不会导致模板实例化并正确编译,如函数h()中所示.这是为什么?是什么造就了get()不同于operatorbool()和operator*()?#includeclassC;std::unique_ptrpC;C&f(){if(!pC)throw0;//OK,eventhoughCis
使用来自“死的”unique_ptr的operator*的返回值是不好的。以下代码可以编译,但当然会导致未定义行为:auto&ref=*std::make_unique(7);std::cout为什么标准没有将std::unique_ptr右值的operator*的返回类型设为内部值的右值,而不是左值,像这样://couldhavebeendoneinsideunique_ptrT&operator*()&{return*ptr;}T&&operator*()&&{returnstd::move(*ptr);}在这种情况下这会工作正常:std::cout(7)但是开头的代码无法编译(无
我的公司使用VisualC++中的MFC作为UI开发的事实标准开发了一个长期存在的产品。我们的代码库包含大量必须保持运行的遗留/陈旧代码。其中一些代码比我还早(最初是在70年代后期编写的),我们团队的一些成员仍在使用VisualStudio6。不过,值得庆幸的是,内部得出的结论是,与竞争对手的产品相比,我们的产品看起来有些过时,需要采取一些措施。我目前正在开发UI的一个新区域,该区域与产品的其余部分完全不同。因此,我有机会尝试"new"技术堆栈,作为一种试验场,然后再开始漫长的UI其余部分迁移过程。我在业余时间使用C#与WindowsForms和.netFramework有一段时间并且
我开始使用C++11功能,我喜欢使用智能指针来拥有对象。这是我的类(class):classMyClass{public:vectorget_objs()const;private:vector>m_objs;};语义是MyClass拥有一系列MyObject通过make_unique创建().get_objs()返回一个原始指针vector,以便各种调用者更新对象。因为那些调用者不拥有对象,所以函数不返回vector.但这意味着我需要实现get_objs()像这样:vectorMyClass::get_objs()const{vectorret;for(autoobj:my_objs
我使用的是VisualStudio2012Update2,我无法理解为什么std::vector试图使用unique_ptr的复制构造函数。我看过类似的问题,大多数都与没有显式move构造函数和/或运算符有关。如果我将成员变量更改为字符串,我可以验证是否调用了move构造函数;但是,尝试使用unique_ptr会导致编译错误:errorC2248:'std::unique_ptr::unique_ptr':cannotaccessprivatememberdeclaredinclass'std::unique_ptr'.我希望有人能指出我所缺少的,谢谢!#include#include
如果不需要动态增长,不知道编译时缓冲区的大小,应该什么时候unique_ptr用来代替vector如果有的话?使用vector是否有显着的性能损失?而不是unique_ptr? 最佳答案 使用std::vector没有性能损失与std::unique_ptr.但是,替代方案并不完全等同,因为vector可以增长而指针不能(这可能是优点也可能是缺点,vector是否错误地增长了?)还有其他区别,比如值将在std::vector中初始化。,但如果你new他们就不会了数组(除非您使用值初始化...)。归根结底,我个人会选择std::vec
声明std::unique_ptr之后但没有分配它(因此它包含一个std::nullptr开始)-如何为其分配一个值(即我不再希望它持有std::nullptr)?我尝试过的两种方法都不起作用。std::unique_ptrmy_str_ptr;my_str_ptr=newstd::string(another_str_var);//compilererror*my_str_ptr=another_str_var;//runtimeerror哪里another_str_var是一个std::string这是较早声明和分配的。清楚我的理解是什么std::unique_ptr正在做的是严重
一位同事坚持对所有全局指针变量使用Meyer的Singleton,因为“不能保证全局unique_ptr的构造不会抛出”。所以不是:#includestd::unique_ptrptr(nullptr);//Apparentlythisisn'tsafe.intmain(/*blah*/){ptr.reset(newFoo());}我们现在有unique_ptrsingleton{try{staticunique_ptrptr();returnptr;}catch(...){std::cerr();}intmain(){}对我来说,这似乎是一种寻找问题的解决方案。他有道理吗?
考虑以下代码行:autosource1=std::unique_ptr(newGpsDevice(comPort,baudrate));autosource2=std::unique_ptr(newGpsLog(filename));如何使用VS2013支持的新std::make_unique函数来编写?有可能吗?**我的问题是我不知道如何告诉std::make_unique要实例化哪种对象。因为只有构造函数的参数被传入,所以似乎无法控制它。 最佳答案 std::unique_ptrbase_ptr=std::make_unique