C++学习总结(十三)——类中的指针与引用,以及new,delete的原理

一.类中的指针与引用的用法

改变指针指向有两种方式:1.通过二级指针改变一级指针的指向。2.通过引用的方式改变指针的指向。

#include<iostream>
class myclass
{
public:
	int x=1;
	int y=2;
public:
	void printxy();
	myclass(int a, int b) :x(a), y(b)
	{
		std::cout << "class build";
	}
	myclass()
	{

	}
	~myclass()
	{
		std::cout << "class 销毁";
	}
};
void myclass::printxy()
{
	std::cout << x << " " << y << std::endl;
}

myclass class1(10,11);
myclass class2(11,12);
void change1(myclass **pp)//二级指针接收一级指针的地址
{
	*pp = &class2;
}

void change2(myclass * &p)//指针的引用,引用一级指针的地址
{
	p = &class1;
}

void main3()
{
	//myclass *p = (myclass *)malloc(sizeof(myclass));

	//free(p);//没有调用析构函数

	//new   delete
	myclass *p = new myclass;

	delete p;
	std::cin.get();
}
void main2()
{
	myclass *p=&class1;
	      //p = &class2;
	p->printxy();
	myclass **pp(&p);
	change1(pp);//change1(&p);
	p->printxy();
	change2(p);
	p->printxy();
	std::cin.get();
}


void main1()
{
	myclass *p=(new myclass(3,4));
	p->printxy();
	myclass class1(10, 20);
	myclass **pp(&p);
	(*pp)->printxy();//一级类指指针
	(**pp).printxy();//0级类指针

	std::cin.get();
}
二.new/delete使用原理

free不会调用析构函数,通过new新建类时,new调用类的构建函数,delete调用类的析构函数。malloc只可以分配内存。

#include<iostream>
#include<stdlib.h>
class MyClass
{
public:
	MyClass();
	~MyClass();
private:
};

MyClass::MyClass()
{   
	std::cout << "creat\n";
}

MyClass::~MyClass()
{
	std::cout << "delete\n";
}

void main()
{	//new delete自动调用构造析构
	MyClass  *p = new MyClass;
	delete  p;
	 //分配内存,释放内存,不会对内存进行操作
	MyClass *p1 = (MyClass *)malloc(sizeof(MyClass));
    free(p1);

	std::cin.get();
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章