c++-构造函数练习和delete,new
强化练习
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <fstream>
using namespace	std;
class	ABCD
{
public:
	ABCD(int	a, int	b, int	c)
	{
		_a = a;
		_b = b;
		_c = c;
		printf("ABCD()	construct,	a: %d,b: %d,c: %d		 \n", _a, _b, _c);
	}
	~ABCD()
	{
		printf("~ABCD()	construct,a: %d,b: %d,c: %d		 \n", _a, _b, _c);
	}
	int	getA()
	{
		return	_a;
	}
private:
	int	_a;
	int	_b;
	int	_c;
};
class	MyE
{
public:
	MyE() :abcd1(1, 2, 3), abcd2(4, 5, 6), m(100)
	{
		cout << "MyE()" << endl;
	}
	~MyE()
	{
		cout << "~MyE()" << endl;
	}
	MyE(const	MyE	&	obj) :abcd1(7, 8, 9), abcd2(10, 11, 12), m(100)
	{
		printf("MyD(const	MyD	&	obj) \n");
	}
public:
	ABCD	abcd1;	 //c++编译器不知道如何构造abc1
	ABCD	abcd2;
	const int	m;
};
int	doThing(MyE	mye1)//mye1.拷贝构造(main::myE)
{
	printf("doThing()	mye1.abc1.a: %d \n", mye1.abcd1.getA());
	return 0;
}
int	run()
{
	MyE	myE;
	doThing(myE);
	return 0;
}
int	run2()
{
	printf("run2	start.. \n");
	//ABCD(400, 500, 600);	 //临时对象的⽣命周期
	ABCD	abcd	=	ABCD(100,	200,	300);
	printf("run2	end\n");
	return 0;
}
int	main(void)
{
	run2();
	return 0;
}
强化练习2
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <fstream>
using namespace	std;
//构造中调⽤构造是危险的⾏为
class	MyTest
{
public:
	MyTest(int	a, int	b, int	c)
	{
		_a = a;
		_b = b;
		_c = c;
	}
	MyTest(int	a, int	b)
	{
		_a = a;
		_b = b;
		MyTest(a, b, 100);//创建一个匿名对象
		//
	}
	~MyTest()
	{
		printf("MyTest~: %d,	 %d,	 %d\n", _a, _b, _c);
	}
	int	getC()
	{
		return	_c;
	}
	void	setC(int	val)
	{
		_c = val;
	}
private:
	int	_a;
	int	_b;
	int	_c;
};
int	main()
{
	MyTest	t1(1, 2);
	printf("c: %d\n", t1.getC());	 //请问c的值是?
	return 0;
}
- 对象的动态构造和释放
- malloc free函数,new delete 操作符号
 - 分配基础类型 、分配数组类型、分配对象
 - new和malloc 深入分析,混用测试、异同比较
 
 - 匿名对象生命周期
 - malloc free函数,new delete 操作符号
 - 分配基础类型 、分配数组类型、分配对象
 - new和malloc 深入分析,混用测试、异同比较
 - 匿名对象总结
- 匿名对象生命周期
 - 匿名对象去和留
 - 构造中调用构造
 
 - 匿名对象去和留
 - 构造中调用构造
 - 静态成员变量和静态成员函数(属于类,语法)
 
new和delete
c与c++的比较
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <fstream>
using namespace std;
class Test
{
public:
	Test()
	{
		cout << "Test()" << endl;
		m_a = 0;
		m_b = 0;
	}
	Test(int a, int b)
	{
		cout << "Test(int, int)" << endl;
		m_a = a;
		m_b = b;
	}
	void printT()
	{
		cout << "printT:"<<m_a<<","<<m_b << endl;
	}
	~Test()
	{
		cout << "~Test()" << endl;
	}
private:
	int m_a;
	int m_b;
};
//C语言中
void test1()
{
	int *p = (int *)malloc(sizeof(int));
	*p = 10;
	if (p != NULL) {
		free(p);
		//delete p;
		p = NULL;
	}
	int *array_p = (int *)malloc(sizeof(int)* 10);
	for (int i = 0; i < 10; i++) {
		array_p[i] = i + 1;
	}
	for (int i = 0; i < 10; i++) {
		printf("%d ", array_p[i]);
	}
	printf("\n");
	if (array_p != NULL) {
		free(array_p);
		array_p = NULL;
	}
	cout << "==============" << endl;
	Test *tp = (Test*)malloc(sizeof(Test));
	tp->printT();
	if (tp != NULL) {
		free(tp);
		tp = NULL;
	}
}
//malloc free 是函数,标准库,stdlib.h
//new 在堆上初始化一个对象的时候,会触发对象的构造函数。malloc不能
//free并不能触发一个对象的析构函数。
//C++中
void test2()
{
	int *p = new int;
	*p = 10;
	if (p != NULL) {
		free(p);
		p = NULL;
	}
	int *array_p = new int[10];
	for (int i = 0; i < 10; i++) {
		array_p[i] = i + 1;
	}
	for (int i = 0; i < 10; i++) {
		cout << array_p[i]<<" ";
	}
	cout << endl;
	if (array_p != NULL) {
		delete [] array_p;
	}
	cout << "==========" << endl;
	//Test *tp = new Test(10, 20);//触发有参构造
	Test *tp = new Test;//触发无惨构造
	tp->printT();
	if (tp != NULL) {
		delete tp;
		tp = NULL;
	}
}
int main(void)
{
	test1();
	cout << "-----------" << endl;
	test2();
	return 0;
}
												
											c++-构造函数练习和delete,new的更多相关文章
- 合成的默认构造函数定义为delete的一种情况(针对C++11标准)
		
1. 默认初始化 如果定义变量时没有指定初值,则变量会被默认初始化,此时变量被赋予了"默认值". 对于类类型的变量来说,初始化都是依靠构造函数来完成的.因此,即使定义某个类的变量( ...
 - new 等于 malloc加构造函数
		
1.new 是c++中的操作符,malloc是c 中的一个函数 2.new 不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数,而malloc则只分配内存,不会进行初始化类成员 ...
 - 重载new和delete
		
当我们创建一个new表达式时,会发生两件事.首先使用operator new()分配内存,然后调用构造函数.在delete表达式里,调用了析构函数,然后使用operator delete()释放内存. ...
 - malloc/free和new/delete的异同
		
一.基本概念 malloc/free: 1.函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针.如果分配失败,则返 ...
 - C++—动态内存管理之深入探究new和delete
		
C++中程序存储空间除栈空间和静态区外,每个程序还拥有一个内存池,这部分内存被称为自由空间(free store)或堆(heap).程序用堆来存储动态分配的对象,即,那些程序运行时分配的对象.动态对象 ...
 - C++动态内存管理之深入探究new和delete
		
C++中程序存储空间除栈空间和静态区外,每个程序还拥有一个内存池,这部分内存被称为自由空间(free store)或堆(heap).程序用堆来存储动态分配的对象,即,那些程序运行时分配的对象.动态对象 ...
 - new malloc和delete free 的区别
		
今天看了一个面试题:问new 和 malloc, delete 和 free 的区别,扭捏了半天,也没说完全:现总结如下: 1.先看看new 和 delete 看一个例子: <span styl ...
 - new/new[]和delete/delete[]是如何分配空间以及释放空间的
		
C++中程序存储空间除栈空间和静态区外,每个程序还拥有一个内存池,这部分内存被称为或堆(heap).程序可以用堆来存储动态分配的对象,即那些在程序运行时创建的对象.动态对象的生存期由程序来控制 ,当动 ...
 - C++内存管理-new,delete,new[],placement new的简单使用
		
技术在于交流.沟通,本文为博主原创文章转载请注明出处并保持作品的完整性 首先,我们先看一下C++应用程序,使用memory的途径如下图所示 C++应用程序中申请内存基于分配器的实现(std::allo ...
 
随机推荐
- 【Luogu P1981】表达式求值
			
点我进入原题Luogu P1981 [解题思路] 仔细分析题目,这就是一道模拟题…… 直接按照符号读入全部的数字,先算乘法,最后把全部数加起来就是结果了 记得要%10000取最后四位 [参考程序] # ...
 - App自动化测试-1.App自动化介绍和环境搭建
			
App自动化测试-1.App自动化介绍和环境搭建 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-b ...
 - Android Saripaar 注解详解
			
写这篇文章的原因 在移动端一般很少使用复杂的表单,一般针对于属性的更改都会打开一个新的页面进行更改.虽然不多,但是也会有.如果一个页面要输入的内容包括姓名.地址.邮箱.手机号等,对各个属性的验证会非常 ...
 - 【开发工具 - Git】之本地项目托管到远程仓库
			
这里所说的“本地项目托管到远程仓库”,说的是:例如,我们在本地有一个写了很长时间的项目,现在想要托管到GitHub或码云上进行版本控制. 这个过程大致需要以下几个步骤: (1)在本地初始化Git项目本 ...
 - typedef & #defiine  & struct
			
#define(宏定义)只是简单的字符串代换(原地扩展),它本身并不在编译过程中进行,而是在这之前(预处理过程)就已经完成了. typedef是为了增加可读性而为标识符另起的新名称(仅仅只是个别名), ...
 - python脚本-简单读取有效python代码量
			
import os count=[0,0] paths=[] file_count=[0] def sum_code(path): if os.path.isfile(path): one_file( ...
 - 爬取豆瓣热销书榜前250 生成.csv文件
			
from lxml import etreeimport requestsimport csvfp = open('E:/doubanbook.csv','wt',newline='',encodin ...
 - 使用IDEA2017.3.5搭建SSM框架
			
转载自博客园,附上原文地址https://www.cnblogs.com/hackyo/p/6646051.html?utm_source=itdadao&utm_medium=referra ...
 - WebGPU学习(三):MSAA
			
大家好,本文学习MSAA以及在WebGPU中的实现. 上一篇博文 WebGPU学习(二): 学习"绘制一个三角形"示例 下一篇博文 WebGPU学习(四):Alpha To Cov ...
 - 这个七夕节,用Python为女友绘制一张爱心照片墙吧!【华为云技术分享】
			
欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字“加群”,加入华为云线上技术讨论群:输入关键字“最新活动”,获取华为云最新特惠促销.华为云诸多技术大咖.特 ...