new キーワードを使用せずに引数リストでオブジェクトをインスタンス化すると、メモリ リークが発生しますか? たとえば、私はタイルクラスを持っています:
// 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
これは正しいです?
現在、同様にインスタンス化されたオブジェクトを引数として取ることができるメソッドを別の場所で作成することを検討しています。これは引数リストでどのように見えるでしょうか? また、メモリ リークが発生しないようにするには、メソッドと呼び出しコードで何を行う必要がありますか?
PSコードスタイルに関するコメントも大歓迎です.Tileは構造体として優れているのではないかと感じているので、特にこれに関するコメントを歓迎します.