首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从unique_ptr返回原始指针正确吗?

从unique_ptr返回原始指针正确吗?
EN

Stack Overflow用户
提问于 2014-08-31 23:47:05
回答 2查看 1.1K关注 0票数 2

问题:如果原始指针仅用作引用,则从unique_ptr返回原始指针正确吗?

背景:为了迎接挑战,我开始在空闲时间创建一个简单的2D游戏引擎。我有一个屏幕基类和一个ScreenManager基类,每个基类都是从屏幕基类中删除的。

屏幕将用于像飞溅屏幕,选项菜单,当然也是重要的游戏屏幕。

ScreenManager基类将用于(向量化、堆叠等)能够为奥运会的需要出谋划策的经理们。

Details:当前,我的屏幕类持有一个指向正在管理它的ScreenManager的原始指针。是这样的,在当前屏幕中,它可以根据自己的状态选择下一步要推送到管理器上的新屏幕。

剥离Sudo代码示例屏幕类

类ScreenManager;//转发声明类屏幕{受保护: ScreenManager* m_manager;// Ptr引用管理器公共:显式屏幕(ScreenManager*管理器):m_manager(管理器){}虚拟空handleEvents(const事件);//可能调用m_ manager ->changeScreen(newScreenUPtr)虚拟空更新( const time,const窗口);虚拟空呈现(const时间,窗口);}

ScreenManager类

类ScreenManager { //实现特定于屏幕的容器私有:虚拟无效handleEvents(const事件);//调用活动屏幕handleEvents()虚拟空更新( const time,const窗口);//相同,用于update()虚拟空呈现(const time,窗口);//同,用于呈现(公共):虚拟空虚changeScreen(unique_ptr newScreen);}

Requery:有比将ScreenManager指针引入屏幕类更好的方法吗?或者我做得对吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-18 00:27:49

这是一个背向指针模式,对吗?A指向有所有权的B,B指向没有所有权的A。

完全健壮的方法是使用shared_ptr和weak_ptr。如果这是单线程的,您可以在父指针声明中记录规则,并注意,当A被销毁时,unique_ptr会首先导致B被销毁。所以这是安全的,,如果您不误用指针或稍后更改代码并改变情况的话。所以,评论和好名字是很重要的。同意,编译器不能强制执行所有可能的误用和擦除您的鼻子。

在现实世界的代码中,你可以指望某人稍后会添加一个特性,并对任何“好的,因为它都是正确的”的东西感到不安。

票数 0
EN

Stack Overflow用户

发布于 2014-11-18 00:12:02

是的,只要ScreenManager超过了包含的Screen,那么我认为您做的是对的。

您可能希望通过引入一个更稳定的接口(例如Screen )来打破您在ScreenManagerIScreenManager之间的循环依赖关系,但它还是可以的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25597296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档