堆栈对象上的保存指针
holding pointer on stack object
我读了关于smart_ptr的主题什么是智能指针,什么时候我应该使用一个?
在我的例子中,我有一个抽象类A
和实现A
的具体类:C
。
C c1;
C c2;
C c3;
我想把这些对象放到一个容器里,比如map
std::map<std::string, A&> mymap;
mymap["foo"] = c1;
所以不能初始化抽象类。我找到的解决方案是使用ptr,如
std::map<std::string, A*> mymap;
mymap["foo"] = &c1;
我想知道是否有任何类型的smart_pointer可以取代原始指针A*
。在主题中显示的示例中,只有动态分配,如:
std::map<std::string, uniq_ptr<A>> mymap;
mymap["foo"] = new C();
那么,是否有一个智能ptr来保存堆栈对象的地址,或者我应该使用原始指针?
谢谢
应该使用原始指针来表示堆栈上的对象。
智能指针本质上是在其析构函数中调用delete,只有在通过new创建对象时才需要delete。堆栈上对象不需要/允许调用delete,当它们超出作用域时,它们的析构函数将被自动调用,并且它们的内存将作为将堆栈指针移动到堆栈开头的一部分被回收(这总是在每次函数返回时发生)。
相关文章:
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 如何访问由共享指针保存的类方法?
- C++,您能否设计一种数据结构,将指针保存在连续内存中并且不会使它们失效?
- 是否可以保存带有参数的函数指针以供以后使用?
- 如何在C++中使用 void* 在指针作为对方法的引用传递时保存uint32_t的值
- 指向结构变量的指针未保存到eeprom
- 有没有办法在没有reinterpret_cast的情况下保存多种类型的指针?
- 在循环迭代期间将引用保存到矢量中的空指针
- 使用函数指针时,ESP 未在函数调用中正确保存
- 如何保存指针地址,以便另一个指针可以继续处理它
- 为什么参考可以保存指针指向指针的内容,即使指针已删除
- 指针的提升序列化保存指针的十六进制值,而不是对象的内容
- Strtok_r()并移动保存指针
- 如何保存指针最初指向的原始值
- C++谷歌模拟SaveArg:如何保存指针参数
- 如何保存指针重定义操作符
- 如何保存指针的类型
- 在数组中保存指针
- Boost::Serialization:如何避免双保存指针?(并得到一个free.c错误)
- 堆栈对象上的保存指针