std :: auto_ptr缺少const拷贝构造函数,因此我不能直接在集合中使用它。有没有一些方法,例如向量的std :: auto_ptr,而不使用boost指针集合模板?C++ std :: auto_ptr拷贝构造函数
回答
不,你不能有一个向量std::auto_ptr
,虽然有很多猜测,你可以。但是如果你的编译器支持C++ 0x,那么你可以使用std::unique_ptr
,这是不推荐使用的自动指针的新选择,它引用了新标准,它提供了一个优越的选择。另请参阅this thread
auto_ptr设计用于在变量离开范围时自动删除。你不想在集合中使用它,而是像上面提到的那样,你想使用类似shared_ptr的东西。 auto_ptr的的典型用途的
例子:
void foo()
{
auto_ptr<int> bar = auto_ptr<int>(new int);
...
return; //memory held by auto_ptr is automatically deleted
}
任何超出此用途是潜在的危险和/或损坏,如果你不知道的auto_ptr的特殊意义。 (编辑:根据Armen的评论澄清)
我会与你的陈述争辩“除此之外的任何用途可能是危险的和/或破碎的......” – 2010-10-19 19:19:58
够公平的,还有其他有效的用途。虽然auto_ptr的使用相对有限,但如果您在约束范围外使用它,可能会非常危险,例如在函数中作为局部变量。 – kkress 2010-10-19 19:25:31
- 1. C++的auto_ptr和拷贝构造
- 2. 拷贝构造函数knowlege
- 3. C++中的拷贝构造函数
- 4. 拷贝构造函数在C++
- 5. 指针和拷贝构造函数C++
- 6. 的拷贝构造函数
- 7. 拷贝构造函数++
- 8. 基类的拷贝构造函数(C++)
- 9. 通用C#拷贝构造函数
- 10. c#拷贝构造函数生成器
- 11. C#泛型拷贝构造函数
- 12. C++默认拷贝构造函数
- 13. C++拷贝构造函数语法
- 14. C++编程拷贝构造函数
- 15. 拷贝构造函数和operator =在C++
- 16. C++的std :: deque的拷贝构造函数问题
- 17. 拷贝构造函数不叫
- 18. 新图的深拷贝构造函数
- 19. D结构体拷贝构造函数
- 20. 为什么隐式拷贝构造函数调用基类拷贝构造函数并且定义的拷贝构造函数没有?
- 21. 避免向量拷贝构造函数
- 22. 移动构造函数和非常拷贝构造函数
- 23. 显式拷贝构造函数和std :: sort
- 24. 拷贝构造函数的区别?
- 25. 段错误拷贝构造函数
- 26. std :: vector的拷贝构造函数是如何操作的?
- 27. 成员函数的调用拷贝构造函数
- 28. g ++中奇怪的C++构造函数/拷贝构造函数问题
- 29. 没有拷贝构造函数可用或拷贝构造函数被声明为'explicit'
- 30. 拷贝赋值为未实现的拷贝构造函数
'shared_ptr'不需要C++ 0x;它在TR1中。 – Potatoswatter 2010-10-19 19:19:48
@Potatoswatter - 感谢您的澄清笔记 - 如果OP有权访问它,'unique_ptr'更适合纠正有缺陷的'auto_ptr'语义。 – 2010-10-19 19:22:06