首页 > 系统相关 >C++Primer Plus第12章类和动态内存分配--再谈定位new运算符----12.9

C++Primer Plus第12章类和动态内存分配--再谈定位new运算符----12.9

时间:2024-06-07 09:58:33浏览次数:18  
标签:12 cout Show -- JustTesting 运算符 buffer new delete

该程序使用定位 new运算符在相邻的内存单元中创建两个对象,并调用了合适的析构函数。

#pragma region 12.9 placenew2.cpp
//placenew2.cpp -- new placement new,no  delete

#if 1
#include <iostream>
#include <string>
#include<new>
using namespace std;
const int BUF = 512;
class JustTesting
{
private:
	string words;
	int number;
public:
	JustTesting(const string& s = "Just Testing", int n = 0)
	{
		words = s; number = n; cout << words << " constructed\n";
	}
	~JustTesting() { cout << words << " destroyed\n"; }
	void Show()const { cout << words << ", " << number << endl; }
};

int main()
{
	char* buffer = new char[BUF];
	JustTesting* pc1, * pc2;

	pc1 = new (buffer)JustTesting;
	pc2 = new JustTesting("heap1", 20);

	cout << endl << "memory block address:\n" << "buffer: "
		<< (void*)buffer << "  heap: " << pc2 << endl << endl;

	cout << "Memory contents:\n";
	cout << pc1 << ": ";
	pc1->Show();
	cout << pc2 << ": ";
	pc2->Show();

	cout << endl;
	JustTesting* pc3, * pc4;
	//控制偏移
	pc3 = new(buffer + sizeof(JustTesting))JustTesting("Bad Idea", 6);
	pc4 = new JustTesting("Heap2", 10);

	cout << endl << "Memory contents:\n";
	cout << pc3 << ": ";
	pc3->Show();
	cout << pc4 << ": ";
	pc4->Show();

	delete pc2; //free heap1,heap2;
	delete pc4;
	//释放顺序和申请顺序相反
	pc3->~JustTesting();
	pc1->~JustTesting();
	delete[]buffer;	//free buffer;
	cout << "Done\n";
	return 0;
}
#endif
#pragma endregion

在这里插入图片描述
总结:
1,从从而是看,在buffer中申请的地址是不一样的。
2,四个对象的析构函数都得到了释放
3,delete的顺序和new的顺序相反,最后new的最先delete

标签:12,cout,Show,--,JustTesting,运算符,buffer,new,delete
From: https://blog.csdn.net/zhyjhacker/article/details/139518740

相关文章

  • 【机器学习】K-means聚类的最优k值的选取(含代码示例)
    ......
  • 【已解决】Python报错 ERROR: Could not find a version that satisfies the requirem
    本文摘要:本文已解决ERROR:Couldnotfindaversionthatsatisfiestherequirement的相关报错问题,并总结提出了几种可用解决方案。同时结合人工智能GPT排除可能得隐患及错误。......
  • VCL界面组件DevExpress VCL v23.2 - 图表控件增强
    DevExpressVCL是DevExpress公司旗下最老牌的用户界面套包,所包含的控件有:数据录入、图表、数据分析、导航、布局等。该控件能帮助您创建优异的用户体验,提供高影响力的业务解决方案,并利用您现有的VCL技能为未来构建下一代应用程序。DevExpressVCLv23.2已于日前正式发布,新版本重......
  • Python进阶:解密collections库的高级功能
    Python内置库collections提供了一些强大的工具类,可以简化和优化我们的编程过程。本文将重点探索collections库中的几个类的使用。通过详细的代码示例和解释,展示如何利用Counter计数和统计元素,以及如何使用defaultdict创建有默认值的字典。一、常见类的介绍Pythoncollections......
  • 【MySQL】LEFT JOIN 踩坑
     一、问题发现:主查询功能发现两条一样的记录,但是审批状态不一样,一个已通过,一个待审核 主表付款表:CREATETABLE`pur_or_payment`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'系统编码初始值为“1”',`pa_code`varchar(32)NOTNULLCOMMENT'付款编号',......
  • 插值技术研究
    过采样与欠采样&图像重采样(上采样&下采样)研究图像插值技术:2016年苏州大学的钟宝江等人《图像插值技术综述》[1]图像插值利用图像已知采样点的灰度值估计未知采样点的灰度值,是图像数据的一种生成过程。图像插值的目的在于通过升采样的方式提高图像的分辨率。插值分类线性......
  • 科研日记4【2024-06-06】
    实验高度向稀疏采样造成的整行缺失使得在高度向上出现严重混叠现象,对高度向稀疏采样的数据首先利用线性插值恢复补全,再将部分插值去掉,以模拟二维随机降采样。实验结果说明上述方法并不好。高度向50%稀疏直接成像:高度向50%稀疏-不动迭代成像:高度向50%稀疏-线性插值后成像......
  • 活动预热丨在 AGI Playground 2024 遇见一群 RTE+AI 的 Builders
    6月22、23日,北京。 AGIPlayground2024,这个夏日最火热的AGI盛会。 王小川、杨植麟等AGI创业者悉数参加。 RTE开发者社区的builders和RTEOpenDay也将在现场! 我们将为大家呈现两大板块:01实时开发挑战WorkshopRTE开发者社区将联合「零一万物」发起w......
  • new/类/null/+/PrimitiveValue/valueOf/toString/环境/HTML 脚本元素属性
    newfunctionmyObjCreate(proto){functionF(){}F.prototype=protoreturnnewF();}functionmyNew(F,...args){letobj=myObjCreate(F.prototype)letres=F.call(obj,...args);returntypeofres==='object'&&res!==null?res:obj......
  • 千问AI agent qwan_agent使用
    代码:#Reference:https://platform.openai.com/docs/guides/function-callingimportjsonimportos#DASHSCOPE_API_KEYfromqwen_agent.llmimportget_chat_model#Exampledummyfunctionhardcodedtoreturnthesameweather#Inproduction,thiscouldb......