C++对象赋值的四种方式
来源:互联网 发布:高分遥感数据定义 编辑:程序博客网 时间:2024/05/16 08:31
1. 引用作为参数的方式传递.
GetObject(Object& obj)
{
obj.value = value1;
}
特点: 在外部构造一个对象. 把该对象以引用的方式传递到函数中. 从而实现对该对象的改变, 该参数实质是一个[out]类型的参数, 而非[in]类型的参数. 这里的引用可以称为别名.
点评: 这种方式需要特别的注释参数是[Out]还是[In]类型, 防止无用. 另外用Get这样的名称, 一般都是指存在返回值的. 这样会存在理解和沟通的问题. 需要特别注释.
这种方式很值得推荐, 因为函数没有分配内存. 不会涉及到内存的释放操作, 很安全.
2. 用指针的方式, 传递参数,
GetObject(Object* obj)
{
obj->value = value1;
}
这个方式跟上面的方式完全一致. 指针跟引用(别名)是指上是一个相同的方式. 是指上所指的都是相同的内存区域.
点评: 同1.
3. 函数内部, 在Heap中构造一个对象, 并在外面返回该对象的指针.
Object* GetObject()
{
Object *a = new Object();
return a;
}
点评: 既然在Heap中构造了一个对象, 准备在哪里将其释放? 是个问题.
这里非常容易造成内存泄漏的, 因为内存分配和释放的原则是: 哪里分配, 就在哪里释放, 显然这里是满足不了要求的.
当然, 上述原则并不绝对(跨模块调用的话, 强烈建议坚持该原则.)
4. 以返回值的方式, 直接返回一个对象.
Object GetObject()
{
Object a;
return a;
}
点评: a对象会复制一份, 交给返回值.
这样造成的问题是, 需要提供copy构造函数, 否则会出大问题的.
另外, 对象的复制, 进行了大量的工作, 将导致效率下降, 同事栈的空间也被占用. 代价还是比较高昂.
//附加一些容易犯的错误.
问题1: 下面的例子的问题是, a对象离开作用域(函数)时, 将可能被自动释放, 造成指针指向的位置被清理的问题.
Object * GetObject()
{
Object a;
return &a;
}
问题2: 下面的例子, 不但造成了内存泄漏, 并且*a所指的对象仍然被复制了一份. 即引发了效率低下, 以及内存泄漏两个问题.
Object GetObject()
{
Object *a = new Object();
return *a;
}
- C++对象赋值的四种方式
- java_String类的对象的两种赋值方式
- 微信小程序两种为对象属性赋值的方式
- 四种不同的对象生存方式
- JAVASCRIPT定义对象的四种方式
- java创建对象的四种方式
- JAVASCRIPT定义对象的四种方式
- javascript的四种创建对象方式
- 四种对象的生存方式
- 对象的四种引用方式
- Java 创建对象的四种方式
- Java创建对象的四种方式
- Java创建对象的四种方式
- JavaScript创建对象的四种方式
- 创建对象的四种方式
- JavaScript创建对象的四种方式
- Java 创建对象的四种方式
- java创建对象的四种方式
- 使用FMDB
- 有关冒泡排序
- JAVA 文件读写大全
- 统计代码运行时间
- 修改Discuzx!后台导航
- C++对象赋值的四种方式
- Cron on Linux
- php的特性
- 关于C#中动态加载AppDomain的问题
- Daemon
- 12月14号英语学习
- 用Eclipse开发的资产管理系统
- VS2008一些快捷键(含Assit)
- 毕业感悟