论坛风格切换
您好,欢迎光临本站!   登录 注册新用户
  • 3519阅读
  • 1回复

3.3.1 指针成员与拷贝构造 [复制链接]

上一主题 下一主题
 
发帖
141299
黑豆
-2859
威望
-2709
贡献值
0
交易币
0
红豆
0
只看楼主 倒序阅读 0 发表于: 2015-01-23
3.3 右值引用:移动语义和完美转发
类别:类作者
3.3.1 指针成员与拷贝构造
对C++程序员来说,编写C++程序有一条必须注意的规则,就是在类中包含了一个指针成员的话,那么就要特别小心拷贝构造函数的编写,因为一不小心,就会出现内存泄露。我们来看看代码清单3-16中的例子。
代码清单3-16
#include <iostream>
using namespace std;
class HasPtrMem {
public:
HasPtrMem(): d(new int(0)) {}
HasPtrMem(const HasPtrMem & h):
d(new int(*h.d)) {} // 拷贝构造函数,从堆中分配内存,并用*h.d初始化
~HasPtrMem() { delete d; }
int * d;
};
int main() {
HasPtrMem a;
HasPtrMem b(a);
cout << *a.d << endl; // 0
cout << *b.d << endl; // 0
} // 正常析构
// 编译选项:g++ 3-3-1.cpp
在代码清单3-16中,我们定义了一个HasPtrMem的类。这个类包含一个指针成员,该成员在构造时接受一个new操作分配堆内存返回的指针,而在析构的时候则会被delete操作用于释放之前分配的堆内存。在main函数中,我们声明了HasPtrMem类型的变量a,又使用a初始化了变量b。按照C++的语法,这会调用HasPtrMem的拷贝构造函数
阅读全文地址:http://book.2cto.com/201306/25364.html
快速回复
限100 字节
 
上一个 下一个