C++中参数列表中实例化对象的内存管理
Memory management for objects instantiated in argument list in C++
如果我在参数列表中实例化对象而不使用new关键字,我会发生内存泄漏吗?例如,我有一个tile类:
// tile.h (too small for implementation)
class Tile {
public:
enum Type {
TYPE_NONE = 0,
TYPE_NORMAL,
TYPE_BLOCK
};
inline Tile(const int id, const Type type) : id_(id), type_(type) {};
inline int id() const { return id_; };
inline Type type() const { return type_; };
private:
int id_;
Type type_;
};
稍后我将加载文本文件中指定的一些平铺:
// ...
int tile_id;
Tile::Type tile_type;
fscanf(file_handle, "%d:%d ", &tile_id, &tile_type);
tile_list_.push_back(Tile(tile_id, tile_type)); // this is the line of interest
// ...
这似乎奏效了。Tile(tile_id, tile_type)
是我不确定的部分,我不知道它最终是堆栈还是堆。tile_list_
是std::vector<Tile>
,到目前为止,我已经假设它将处理我传递给它的Tile
对象的内存。这是正确的吗?
现在,我正在考虑在其他地方制作一个方法,可以将类似的实例化对象作为参数。这在参数列表中会是什么样子,在方法和调用代码中必须做些什么才能确保没有内存泄漏?
附言:任何关于代码风格的评论都是受欢迎的,我有一种感觉,Tile作为一个结构可能会更好,所以特别欢迎对此进行评论。
您不会有内存泄漏,并且对象将在表达式之后被销毁。
tile_list_.push_back(Tile(tile_id, tile_type));
将其副本插入到矢量中理论上。在实践中,在这种情况下可能会出现省略副本的情况,但这无关紧要,我只是为了答案的完整性而这么说。
一般来说,如果不使用new
或malloc
,就不会发生内存泄漏,当然,除非您使用了一个在后端分配内存且不使用RAII的糟糕库。但这里的情况并非如此,因为您使用的是std
。
相关文章:
- 当vector是tje全局变量时,c++中vector的内存管理
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- C++将字符串传递给 C 库以进行内存管理
- 从函数返回时C++内存管理
- 函数指针和 lambda 的内存管理
- 自定义内存管理器在发布模式下工作正常,但在调试模式下则不然
- C++中的内存管理
- C和C++中的内存管理有什么区别
- 字符 * 未从重载运算符或内存管理问题正确返回
- 如何在源代码中使用执行策略检测 C++17 的扩展内存管理算法的可用性?
- 底层指针和内存管理
- 智能指针,避免使用QNetworkAccessManager时进行手动内存管理
- c++中的内存管理问题
- 使用矢量时的内存管理
- 循环和内存管理中的指针算术C++?
- C++堆栈内存管理问题
- C 内存管理中的课程如何管理 - 研究
- 不可变数据模型的内存管理
- C++ 使用数组初始化时的 STL 向量内存管理
- SFML 纹理内存管理