C ++ std :: make_shared内存泄漏

时间:2012-12-26 05:18:04

标签: c++ memory memory-management

我遇到以下代码行的内存泄漏问题:

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_;
    }
};

英特尔检查员继续报告说我有内存泄漏 函数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类的简化版本。

基本上,我正在分配一个shared_ptr<SpriteState>并坚持在std::map课程中Sprite

1 个答案:

答案 0 :(得分:1)

升级到vs12后问题已解决。我最好的估计是问题与智能指针的tr1实现有关。