C++中利用智能指针和值型类防止内存非法访问
作者:网络转载 发布时间:[ 2013/3/20 10:21:13 ] 推荐标签:
这样确保了共享的对象在没有指针指向它的时候才被delete掉,也不会发生内存的非法访问了。
另一种方法是把类设计成和值类型具有相同的复制行为,即复制类对象的同时复制指针指向的值,而不是只复制指针的值。于是可以把上述MyClass这样定义:
class MyClass
{
public:
MyClass(int &p,int i): ptr(new int(p)), value(i) { }
MyClass(const MyClass &mc): ptr(new int(*mc.ptr)), value(mc.value) { }//把值也复制
~MyClass() { delete ptr; }//这里可以直接释放
MyClass& operator=(const MyClass&);
int get_share_value() { return *ptr; }
int get_value() { return value; }
void set_share_value(int i) { *ptr = i; }
void set_value(int i) { value = i; }
private:
int *ptr;
int value;
};
MyClass& MyClass::operator=(const MyClass &mc)
{
*ptr = *mc.ptr;
value = mc.value;
return *this;
}
这样每个指针都指向一个值相同但相互独立的对象,delete后也不会影响到其他的对象。
这种方法也叫深度复制,在C#中可以通过实现clone接口来完成。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11