一.類中的指針與引用的用法
改變指針指向有兩種方式: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();
}