Bil*_*ter 2 c++ design-patterns
昨天我问了以下问题,为方便起见,转载于此;
"对于我的一个项目,我真正想做的就是这样做(将其简化为最低限度);
struct Move
{
int src;
int dst;
};
struct MoveTree
{
Move move;
std::vector<MoveTree> variation;
};
Run Code Online (Sandbox Code Playgroud)
我必须承认,我认为不可能直接这样做,我认为MoveTree中的MoveTree矢量将被禁止.但无论如何我都试过了,它的效果非常好.我正在使用Microsoft Visual Studio 2010 Express.
这是便携式吗?这是好习惯吗?我有什么值得担心的吗?"
基本上社区的答案是否定的,我不能这样做,标准禁止它,所以它有效的事实意味着我很幸运.
所以我的新问题是.如何在合法的C++中实现我想要的简单功能,而不会增加一堆令人讨厌的复杂性和痛苦?
您需要使用指针和动态分配.你应该使用智能指针,以确保你不泄漏任何东西.boost::shared_ptr允许类型不完整,因此这是合法的:
std::vector< boost::shared_ptr<MoveTree> > variation;
Run Code Online (Sandbox Code Playgroud)
(我不知道0x std::shared_ptrTBH,但它应该是相同的).