0

次のコード行でメモリ リークの問題が発生しています。

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::mapSprite

4

1 に答える 1

1

vs12 へのアップグレード後、問題は解決されました。私の最善の推定では、問題はスマート ポインターの tr1 実装に関係していたということです。

于 2013-01-29T03:56:58.327 に答える