【发布时间】:2018-02-01 09:25:50
【问题描述】:
我正在写一个纸牌游戏。我有以下课程:Card、Deck、Player、Board、GameLogic。
Deck 包含一个由 unique_ptr Cards 组成的向量。然后从牌堆中抽出一张牌并传递给玩家。然后玩家选择一张牌并放...这里我有一个设计问题。因为到目前为止,拥有一个 unique_ptr 完全没问题。但后来我想将一张卡片传给 Board 和 GameLogic。
目前我将 unique_ptr 转换为 shared_ptr。但我觉得它既丑陋又不合逻辑。
我相信正确使用指针非常重要,应该告诉你变量的生命周期。我做错了什么,但不知道是什么......
您对如何解决有什么建议吗?
【问题讨论】:
-
我通常的建议是不要将智能指针视为一些简单的自删除指针,而是从所有权的角度来看。一个“资源”会有多个所有者 (
std::shared_ptr) 还是只有一个所有者 (std::unique_ptr)?也许智能指针在这里不正确,但您应该使用普通的 non-owning 指针?或者想出一个你不需要指针的设计? -
你为什么使用指针而不只是卡片值?
-
你为什么有
unique_ptr<Card>s? Card 是多态的(为什么)?您可以只拥有一个vector<Card>并按值复制它们。 -
@Someprogrammerdude 一个所有者拥有一个共享指针,然后非所有者获得指向它的弱指针,这没什么错。当然,你可以用 Java 编写你最终得到的语法,但它会很好地工作。
-
@UKMonkey 你必须有特定的理由需要弱指针,因为它们很慢。但是当他们需要时,他们很棒!
标签: c++ c++11 design-patterns c++14 c++17