sf::RectangleShape* operator()()
{
return &player;
} // RectangleShape Getter
这个吸气剂后我需要释放内存吗?如果是,那么如何使用unique_ptr
执行此操作?
我试过
std::unique_ptr<sf::RectangleShape> operator()()
{
return std::unique_ptr<sf::RectangleShape>(player);
} // RectangleShape Getter
但它表示括号运算符没有匹配函数。怎么办呢?
答案 0 :(得分:1)
似乎player
是一个类的成员,你试图发出一个指向它的指针,以便在类外修改它?
在这种情况下,它所属的类拥有内存,并且它是由该类来处理,以便在数据被销毁时释放数据。绝对不能从类外部释放指向该成员的指针。
有关拥有类的更多信息会有所帮助,但如果我可以假设player
是数据成员,那么您的第一个示例在技术上很好。但是,返回引用通常比指针更惯用。
class SomeClass
{
sf::RectangleShape player;
sf::RectangleShape& operator()()
{
return player;
}
};
如果上述假设不正确,您应该显示完整的类定义,以便我们获得更多信息以形成正确的解决方案。
答案 1 :(得分:0)
def up
connection.execute(%q{
update stories
set story_type = case story_type
when 'whatever1' then 'Whatever1Story'
when 'whatever2' then 'Whatever2Story'
end
})
end
这个吸气剂后我需要释放内存吗?
您所做的就是返回指向sf::RectangleShape* operator()()
{
return &player;
} // RectangleShape Getter
的指针。假设这是struct / class的成员变量,上面的成员函数是其中的一部分,那么它的生命周期就绑定到你用该函数调用该对象的对象的生命周期。
特别是这意味着这是一个坏主意:
player
[..]如何使用unique_ptr进行此操作?
假设struct Foo {
sf::RectangleShape player;
// ...
// insert your operator here
};
sf::RectangleShape * some_function(void) {
Foo f;
return f(); // UB, returning pointer to object with automatic memory whose lifetime has ended
}
有复制构造函数,那么您可以复制sf::RectangleShape
:
player
你得到的副本是#34;你的&#34;,即你可以根据需要管理你的生命。