C++ 智能指针故障

C++ 智能指针故障,c++,smart-pointers,C++,Smart Pointers,我目前正在尝试使用智能指针,但在尝试访问getColor()时遇到了SEGFULT 有人能说出我遗漏了什么吗? (对于理解板,定义如下:std::unique_ptr board[高度][宽度];) std::unique_ptr current(新棋子(颜色:白色)); 此->板[1][1]=std::move(当前); 如果(此->板[1][1].get()==nullptr){ Log::debug(“是null ptr”); 返回; } 如果(此->板[1][1].get()->getC

我目前正在尝试使用智能指针,但在尝试访问getColor()时遇到了SEGFULT

有人能说出我遗漏了什么吗? (对于理解板,定义如下:std::unique_ptr board[高度][宽度];)

std::unique_ptr current(新棋子(颜色:白色));
此->板[1][1]=std::move(当前);
如果(此->板[1][1].get()==nullptr){
Log::debug(“是null ptr”);
返回;
}
如果(此->板[1][1].get()->getColor()==Color::BLACK){
日志::调试(“黑色”);
}否则{
日志::调试(“白色”);
}

谢谢

您的问题没有提供太多细节。但我能够编码并运行它,而不会出现故障

#包括
#包括
constexpr std::大小和高度{8};
constexpr std::size\u t WIDTH{8};
枚举类颜色{
白色,黑色
};
结构件{
显式块(颜色):颜色(颜色){
Color getColor()常量{
返回颜色;
}
颜色;
};
结构典当:公共物品{
显兵(颜色):件(颜色){
}
};
结构板{
标准:独特的ptr板[高度][宽度];
空集(){
标准::唯一的ptr电流(新棋子(颜色::白色));
此->板[1][1]=std::move(当前);
如果(此->板[1][1].get()==nullptr){
fmt::打印(“为空PTR”);
返回;
}
如果(此->板[1][1].get()->getColor()==Color::BLACK){
fmt::打印(“黑色”);
}否则{
fmt::打印(“白色”);
}
}
};
int main(){
董事会b;
b、 set();
}
更新 这是一个我更喜欢的版本:

变异与遗传 我没有继承
Piece
,而是将
PieceType
a
std::variant
置于所有可能类型的棋子(典当、皇后、国王等)之上。这是可能的,因为片段集是封闭的:我们在编译时知道所有可能的片段

enum类颜色{白色,黑色};
结构典当{};
结构王{};
使用PieceType=std::variant;//扩展到所有部件
结构件{
工件(工件类型,颜色):颜色(颜色),类型(类型){
Color getColor()常量{返回颜色}
颜色;
分片型;
};
std::array
vs不安全的C-array 我将
board
的定义从
std::unique_ptr board[8][8]
切换到
std::array
。这更安全,更习惯于C++。 空指针与可选指针 而不是使用唯一的_ptr来表示字段是否为空。我使用
std::optional

std::阵列板;
//可以写成
使用Field=std::可选;
使用Row=std::array;
使用Board=std::array;
董事会会议;
请提供一份详细的信息。这里没有足够的内容进行调试。