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();
}


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