我遇到以下代码行的内存泄漏问题:
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
。
答案 0 :(得分:1)
升级到vs12后问题已解决。我最好的估计是问题与智能指针的tr1实现有关。