一.类中的指针与引用的用法
改变指针指向有两种方式: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();
}