c++资源管理

文章目录
  1. 1. 参考资料

c++ 支持将对象存储再栈中。但是一些情况下,对象不宜存在栈上。

  1. 对象过大
  2. 对象大小在编译期不能确定
  3. 对象是函数的返回值,但由于特殊原因不能用值返回。

下面是工厂方法的实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
enum class shape_type {
circle,
triangle,
rectangle
};

class shape{...};
class circle: public shape{...};
class triangle: public shape{...};
class rectangle: public shape{...};

shape* create_shape(shape_type type) {
...
switch(type) {
case shape_type::circle:
return new circle(...);
case shape_type::triangle:
return new triangle(...);
case shape_type::rectangle:
return new rectangle(...);
...
}
}

需要确保返回值不发生内存泄漏, 简单解决方案如下:

1
2
3
4
5
6
7
8
9
10
11
12
class shape_wrapper {
public:
explicit shape_wrapper(
shape* ptr = nullptr)
: ptr_(ptr) {}
~shape_wrapper() {
delete ptr_;
}
shape* get() const {return ptr_;}
private:
shape* ptr;
}

参考资料

  • [现代c++实战30讲]