c++const指针来传递对象实例

c++const指针来传递对象实例,按址传递对象虽然可以避免调用复制构造函数和析构函数,但是由于他得到了该对象的内存地址,可以随时修改对象的数据,所以他实际上是破坏了按值传递的保护机制。解决之一办法就是使用const指针来接收对象,这样就可以防止任何试图对该对象所进行的操作行为,并且抱枕返回一个不被修改的对象。

#include <iostream>
using namespace std;
class A
{
public:
A(){cout<<”执行构造函数创建一个对象\n”;}
~A(){cout<<”执行析构函数删除该对象\n”;}
A(A&){cout<<”执行复制构造函数创建该对象的副本\n”;}
void set(int x){i=x;}
int get()const{return i;}
private :
int i;
};

const A*const func(const A *const one){//保证传进来的对象和返回的对象时不被修改的!
one->get();//get函数仅仅返回值,没有修改
//one->.set(99);这里是错的,因为c++参数试图修改对象,而const保证对象时不可以修改的
//one++;这也是错的因为,参数加上const后也是不可以修改的。
return one;
}

int main()
{
A a;
a.set(99);
//A*p=func(&a);这句c++程序也是错的,因为func函数返回的是指向常量的常指针,而现在的p指针
const A*const p=func(&a);//p指针为指向常量的常指针,因此是正确的,但不能修改指向对象的值
cout<<p->get()<<endl;
//func(&a);
return 0;
}

我们将函数的返回值与接收参数都设定为const,就是保证函数内不可以修改原始值,同时避免了利用返回值对原始函数进行修改。所以加上这个const,实际上就是为了实现值传递的保护机制,同时不再调用复制构造函数。但比较麻烦,所以我们还可以使用别名进行操作。 本文链接地址: c++const指针来传递对象实例