次のコード行でメモリ リークの問題が発生しています。
auto state = newSpriteState();
関連する機能は次のとおりです。
class SpriteState {
protected:
Vector3 position;
int width, height;
double rotation, scaling;
int priority;
public:
SpriteState()
: position(0,0,0),
width(1), height(1),
rotation(0), scaling(1.0f),
priority(0)
{}
std::shared_ptr<SpriteState> newSpriteState()
{
return std::make_shared<SpriteState>();
}
};
class Vector3 {
private:
double x, y, z;
public:
Vector3( double x_, double y_, double z_ )
{
x = x_; y = y_; z = z_;
}
};
Intel Inspector は、関数でメモリ リークが発生していると報告し続けていますnewSpriteState()
。より具体的にstd::make_shared<SpriteState>()
。
アップデート
コメントから判断すると、これには何らかの外的理由があるように思われるため、ここにさらにコードを示します。
bool Sprite::loadImage() {
auto state = newSpriteState();
initStateVector(0, state);
}
どこ:
class Sprite
{
public:
Sprite();
std::map<const int, const std::shared_ptr<SpriteState>> stateVector;
void initStateVector(const int line, std::shared_ptr<SpriteState>& state)
{
stateVector.clear();
stateVector.insert(std::make_pair( line, std::move(state) ));
}
void loadImage();
}
Sprite
わかりやすくするために、実際に使用しているクラスの簡略版をアップロードしました。
基本的に、私は a を割り当てて、 in class にshared_ptr<SpriteState>
固執しています。std::map
Sprite