使指针Getter使用unique_ptr
Make Pointer Getter use unique_ptr
sf::RectangleShape* operator()()
{
return &player;
} // RectangleShape Getter
需要在getter之后释放内存吗?如果是,如何对unique_ptr
进行此操作?
我试着
std::unique_ptr<sf::RectangleShape> operator()()
{
return std::unique_ptr<sf::RectangleShape>(player);
} // RectangleShape Getter
但是它说没有匹配圆括号操作符的函数。还应该怎么做呢?
sf::RectangleShape* operator()()
{
return &player;
} // RectangleShape Getter
需要在getter之后释放内存吗?
你所做的就是返回一个指向player
的指针。假设它是上述成员函数所属的结构/类的成员变量,那么它的生命周期将绑定到调用该函数的对象的生命周期。
这尤其意味着这是一个坏主意:
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
}
[. .如何在unique_ptr中做到这一点?
假设sf::RectangleShape
有一个复制构造函数,那么你可以复制player
:
std::unique_ptr<sf::RectangleShape> operator()() {
return make_unique<sf::RectangleShape>(player);
}
你得到的副本是"你的",也就是说,你可以随心所欲地管理它的生命周期。
似乎player
是一个类的成员,你正试图拿出一个指向它的指针,让它在类外修改?
在这种情况下,它所属的类拥有内存,并且当数据被销毁时,由该类处理释放数据。指向该成员的指针绝对不能从类外部释放。
这将有助于有更多的信息,关于拥有的类,但如果我可以假设player
是一个数据成员,那么你的第一个例子在技术上是好的。然而,通常返回引用比返回指针更习惯。
class SomeClass
{
sf::RectangleShape player;
sf::RectangleShape& operator()()
{
return player;
}
};
如果上面的假设是不正确的,你应该展示你的完整的类定义,以便我们有更多的信息来形成一个正确的解决方案。
相关文章:
- 为什么 std::unique 不调用 std::sort?
- CLANG 编译器 说:变量"PTR"可能未初始化
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 将 ptr 传递给 ptr 到 A 作为参数传递给 A 的函数是不好的做法吗?
- 为共享 ptr 向量实现复制 c'tor?
- 字符和整数中 **(ptr+1) 的值差异
- C++:在不中断共享的情况下通过引用传递共享 PTR?
- 生成"unique"矩阵
- 如何将派生类从基 ptr 分配给 nlohmann::json
- 引用 std::shared:ptr 以避免引用计数
- 我对 std::unique(算法)C++有问题
- 为什么我不能在不进行任何转换的情况下将浮点数放入任何类型的 ptr 中?
- 在调用函数时,ptr** 和 ptr*& 之间是否有区别,或者首选C++?
- 另一种类型的智能ptr,比如具有弱refs的unique_ptr
- 尝试打印出 *ptr++ 的值,以了解它是如何工作的
- 如何控制共享 ptr 引用计数?
- std::shared_ptr::unique(),复制和线程安全
- 如何在C++03中用自定义谓词调用std::unique
- C++中的指针否定 (!ptr == NULL)
- C++14 unique_ptr并使用已删除的函数'std::unique-ptr' unique_ptr错误