#include <iosteam>
#include "Data.h"
void test1(Data data)
{
}
void test2(Data * data)
{
//若传入空指针,加判断
if (data == nullprt)
{
return;
}
}
void test3(Data & data)//传引用不用做空指针判断
{
//存在通过引用操作data对象的漏洞
}
void test3(const Data & data)//加上const 函数内部无法操作data对象,规避漏洞。
{
}
Data getData()
{
Data data;//新建一个对象 == 新开一片内存
return data;
}
int main()
{
Data data;//创建副本
test 1(data);//操作副本
test 2(&data);//指针操作
test2(nullprt);//传入空指针
test3(data);//直接传入对象,更便捷。
Data data = getData();//调用结束,getData 返回的data内存释放,将之拷贝至新的内存对象“=”左边的那个data。(无形之中,资源浪费)
const Data & data = getData();
test3(data);//调用test3() 若data为const 修饰变量,test 函数内部赋值也必须为const修饰。
test3(getData());//简写。
return 0;
}
向函数中传递一个对象:
若是直接在函数的参数列表中传递对象,那么这个传递到函数内部的对象仅仅是副本,造成资源浪费。
所以,一般选择使用指针或者引用作为函数列表中的对象引用
使用指针作为函数列表的参数时,为了增加健壮性还需要对指针进行判空操作。
因此可以选择使用引用传递对象
而且,可以使用const修饰来增加对象的存在周期,且指向不可修改。