STL::List的对象存储与释放

写了一个小程序,来检查一下List中如何管理存储的对象。

#include "stdafx.h"
#include <list>
#include <iostream>

using namespace std;

class MyClass
{
  public:
  int nMember;
  int * pMember;
  public:
   
    MyClass(void)
 {
  cout<<"New my Class"<<endl;
  nMember = 0;
  pMember = &nMember;
  cout<<" pMember is "<<pMember<<endl;
 };

 ~MyClass(void)
 {
  cout<<"Free my Class"<<endl;
  cout<<" The number is "<<nMember<<endl;
  cout<<" pMember is "<<pMember<<endl;
  cout<<" *pMember is "<<*pMember<<endl;
  *pMember = 15;
 }
};

int _tmain(int argc, _TCHAR* argv[])
{
 list<MyClass> m_Container;
 
 MyClass *a = new MyClass();

 a->nMember = 1;

 m_Container.push_back(*a);

 a->nMember = 2;
 delete a;

 return 0;
}

 

程序的运行结果如下:


显然当调用push_back时,生成了一个新的实例,所以出现了两个析构函数的调用。同时观察一下pMember值的变化,这可是很容易出问题的地方!

 

如果List存储的是对象指针可就要小心了。

时间: 2024-09-27 16:13:15

STL::List的对象存储与释放的相关文章

C++永久对象存储 (Persistent Object Storage for C++)

c++|object|对象      C++永久对象存储 (Persistent Object Storage for C++)简介 描述对象类型 从存储器中分配和释放对象 永久对象协议 存储器构造函数 打开存储器 POST++ 的安装 POST++ 类库 和 POST++一起使用 STL 类 替换标准分配子 如何使用 POST++ S调试 POST++ 应用的细节 关于 POST++ 更多的一些信息 简介POST++ 提供了对应用对象的简单有效的存储. POST++ 基于内存文件镜像机制和页面

C++永久对象存储

C++永久对象存储 (Persistent Object Storage for C++) 简介 描述对象类型 从存储器中分配和释放对象 永久对象协议 存储器构造函数 打开存储器 POST++ 的安装 POST++ 类库 和 POST++一起使用 STL 类 替换标准分配子 如何使用 POST++ S调试 POST++ 应用的细节 关于 POST++ 更多的一些信息 简介 POST++ 提供了对应用对象的简单有效的存储. POST++ 基于内存文件镜像机制和页面镜像处理.POST++ 消除了对永

对象存储的兴起

在本文中,作者斯科特·辛克莱尔将为广大读者诸君分析对象存储存在于当今的数字化市场的必要性,同时,还将为您重点介绍Cleversafe公司的解决方案.斯科特·辛克莱尔撰写了关于对象存储的理想使用案例,并介绍了购买这种技术时需要考虑的相关要素.他认为,Cleversafe公司的对象存储解决了归档/内容存储库.归档合规性.内容分发.数据湖/hub枢纽.备份目标.协同和企业内部部署云的使用案例等一系列问题.最终得出的结论是,对象存储为"数据的保护和规模化提供了一个相当卓越的方法",建议客户保持

Scality对象存储添加Hadoop、OpenStack插件

对象存储初创公司Scality将其存储添加到Hadoop,使用户可避免通过Hadoop自己的文件系统加载数据.他们还推出了一款针对Cinder--在OpenStack项目里面的块存储层的插件. RING是基于一组X86服务器节点的对象存储基础架构,存储对象而不是文件或块,而且可以并行操作. Scality提供的一个被称为"生产级Hadoop存储实施"使用了CDMI--由SNIA开发和推广的面向云计算数据管理的云存储标准.CDMI开始缓慢被供应商支持但处于回升的步伐. Scality已经

用命令模式实现对象存储——对象与关系数据库

一.开发背景 面向对象方法在软件开发的分析.设计以及编码中作用越来越重要,它 在适应系统需求变化.提高软件可重用性和开发效率方面有着其它开发方法无法比拟的优点 .面向对象思想将应用域中的概念描述成对象,应用系统由一系列对象构成,对象之间可以 传递消息,系统的运作可说就是对象间的协同工作.有过开发经验人都知道,应用系统中有 些是对象是要持久存在的,需要将它们存入磁盘,以便在重启系统时能够调入系统.这些对 象在面向对象方法中主要指实体对象,为了一致,本文中以实体对象代表所有需要存储的对 象. 目前,

解析Linux新技术对象存储文件系统

随着高性能计算由传统的主机方式向网络化集群演变,传统的基于主机的存储架构已逐渐向网络化存储发展,计算和存储分离的趋势越来越明显.针对 SAN 和 NAS 的不足,国际上已开展针对 Linux 集群的新型文件系统――对象存储文件系统的研究,本文重点论述了存储对象文件系统的架构.技术特点,并针对Lustre 对象存储文件系统进行了初步测试,结果表明对象存储文件系统在可扩展性.性能.易用性等方面都有显著提高,随着网络化存储技术的不断成熟,对象存储文件系统将成为重要的发展方向. 一.引言 高性能计算已由

在STL中处理对象指针

众所周知,STL的容器类是针对对象来进行存储管理的.虽然没有明确的限制不能在STL的容器类中包含指针,STL也不在乎您存放在容器中的对象还是指针.但仔细考虑STL的初衷,在容器类中使用指针是明显不合时宜的. CKER的意思是您应该尽可能的直接将对象本身而不是将对象的指针放置在STL容器类中.直接在容器中存放指针一个最大的副作用就是可能导致内存泄漏.这个问题在char *类型上有突出的体现. 但某些时候,直接使用对象指针有明显的好处,这些情况大致可以概括为如下的几个方面: 1. 当对象十分庞大时,

干到底--三种存储类型比较-文件、块、对象存储

http://limu713.blog.163.com/blog/static/15086904201222024847744/ http://www.dostor.com/article/2012-12-27/7887715.shtml   块存储和文件存储是我们比较熟悉的两种主流的存储类型,而对象存储(Object-based Storage)是一种新的网络存储架构,基于对象存储技术的设备就是对象存储设备(Object-based Storage Device)简称OSD.        

为Docker Trusted Registry配置OSS对象存储

简介 Docker Trusted Registry(DTR)是Docker企业版的重要组成部分,可以部署在企业专有云环境中,提供容器镜像管理,认证授权.安全扫描.数字签名等能力. Docker镜像管理需要使用大量的存储资源,采用本地存储无法满足用户对容量和可用性的需求.Docker Registry已经内置了对阿里云对象存储服务(OSS)的支持,为镜像管理提供一个支持海量数据存储,高性能访问,高可用,安全,低成本,无需运维的存储后端.本文将介绍如何在Docker Trusted Registr