#includeintmain(){std::shared_ptrarray(newdouble[256],[](double*d){delete[]d;});}我制作了一个shared_ptr指向一个double组,它有自己的自定义删除器。现在如何访问数组?假设我希望访问索引为1的数组。我尝试了通常的“括号方法”,但出现错误。单词array默认指向它的第一个元素,但是如果我想访问第二个元素怎么办?使用增量和括号给我“不匹配运算符”错误。有人可以向我解释幕后发生的事情吗?我问这个是为了研究目的,尽管我知道unique_ptr和vector会做得更好。 最佳答
我如何静态断言表达式是std::unique_ptr即std::unique_ptr对于任何T.static_assert(std::is_pointer()),"notasmartpointer")以上无效。如果没有什么直截了当的,我只对bool()感兴趣运算符是为类型定义的。 最佳答案 通过适当的部分特化创建您自己的特征:templatestructis_unique_ptr:std::false_type{};templatestructis_unique_ptr>:std::true_type{};
这个问题在这里已经有了答案:Conversionofpointer-to-pointerbetweenderivedandbaseclasses?(2个答案)关闭6年前。如果我没有指定对Base**的显式转换,为什么会出现编译错误?处理派生类时可以使用指向指针的指针吗?classBase{};classChild:publicBase{};voidSomeFunction(Base**ppoObj){}voidSomeFunction(Base*poObj){}intmain(){Child*c=newChild();//Thispassed.SomeFunction(c);SomeF
我正在尝试实现一个可以像这样使用的std::unique_ptr工厂:autofd=my_make_unique(fopen("filename","r"));即,将删除函数作为模板参数传递。我在C++11中的最佳尝试是:templatestructDeleter{voidoperator()(P*ptr){deleter(ptr);}};templatestd::unique_ptr>my_make_unique(P*ptr){returnstd::unique_ptr>(ptr);}在C++14中它更简洁:templateautomy_make_unique(P*ptr){stru
试验C++0x特性的最佳编译器是什么?我一直在试验GNUg++4.4。 最佳答案 绝对是GCC主干。ConceptGCC遗漏了GCCtrunk的许多功能。不过,它目前正被合并到GCC中。它具有所有这些功能,包括新的auto类型的变量(虽然还没有新的函数声明语法):http://gcc.gnu.org/projects/cxx0x.html.有一个包含部分lambda支持的GCC分支,它还包含其他C++0x特性。我建议您也尝试一下。它在#geordiatirc.freenode.org上使用,您可以在那里进行试验。
查看标准N3291我没有找到任何关于tuple的引用资料支持begin()和end().但是,当我查看多年前的笔记时,我似乎记下了我需要稍后再研究的内容。我们到了。我找不到任何tuple.begin()的痕迹或tuple.end()在当前的C++0x标准中,这是正确的吗?不可能将元组及其迭代器传递给算法,for也不能。-遍历它,对吧?tupleval;for(autoa:val)cerr这当然是废话,因为应该auto是吗?我需要确认我的笔记包含错误,并且无法获取元组元素的那些迭代器。或者在标准讨论中可能有一条被遗弃的路径?注意:我知道可以使用TMP或VariadicTemplates来
我在像这样的小函数中使用scoped_ptr。这样我就不必调用delete了。这是这种用法的矫枉过正吗?我的团队成员更喜欢原始指针和删除。如果这恰好用在非常关键的路径中,那么使用scoped_ptr的成本是多少?这不应该是内联的并且完全等同于在优化的二进制文件中使用普通删除吗?voidmyfunc(){boost::scoped_ptrobjptr=someFactory::allocate();callsomeotherfunc(objptr.get());} 最佳答案 我不确定对性能的影响,但是在这里使用scoped_ptr确保
我想在我的C++应用程序中使用智能指针。使用stdscoped_ptr应该包含哪个头文件? 最佳答案 标准C++库中没有scoped_ptr。全部C++11smartpointers在标题中.如果你想要boost::scoped_ptr那么你需要boost/scoped_ptr.hpp. 关于c++-应该使用哪个header来使用scoped_ptr,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/q
最后我找到了一个非常奇怪的错误,这是由两次调用析构函数引起的。这是重现错误的最少代码:#include#include#includeclasscEventSystem{public:cEventSystem(){std::cout(eventSystem);}voidonEvent(){}std::shared_ptrtileBrowser;};intmain(){cEventSystemeventSystem;cGuigui(eventSystem);}输出是:constructor:0x7fffffffe67fdestructor:0x7fffffffe2dfdestructor
我正在创建自己的自定义Filter类以用于boost::filtered_graph。WeightMap概念必须具有默认构造函数、复制构造函数和赋值运算符。我创建了下面的类,它有一个std::shared_ptr私有(private)成员。我的问题是我应该如何编写赋值运算符。复制构造函数没有问题,但赋值运算符不起作用。classBFDMFilter{private:constBGraph*m_battlemap;conststd::shared_ptrm_mv_ab;public:BFDMFilter():m_battlemap(nullptr),m_mv_ab(){}BFDMFilt