这很丑陋:
wxPaintDC dc(this);
dc.SetPen(*wxBLACK_PEN);
dc.SetBrush(*wxBLACK_BRUSH);
这是因为
dc.SetPen
需要一个const wxPen&
-如您所愿。我通常在堆栈上创建笔,为什么此宏扩展为指针? (我希望有一个const wxPen&)宏扩展为:
wxStockGDI::GetPen(wxStockGDI::PEN_BLACK)
这是工厂吗?它被命名为“获取”而不是“制造”。
我应该删除笔吗?那将使它的使用更加混乱!
这不是支持“工厂”假设的
const wxPen*
。我可以改变它!为什么它返回一个指针?我应该删除它吗?
只是为了让我看起来并不傻:
我认为应该删除它的原因是它不是const,如果我更换了这支笔,我不想更换黑笔!因此它必须是副本!
我刚刚尝试过(我不喜欢这样的实验),删除笔不是一个好主意! (崩溃)
最佳答案
我已经在Google上搜索并找到GetPen
的代码。
const wxPen* wxStockGDI::GetPen(Item item)
{
wxPen* pen = static_cast<wxPen*>(ms_stockObject[item]);
if (pen == NULL)
{
switch (item)
{
case PEN_BLACK:
pen = new wxPen(*GetColour(COLOUR_BLACK), 1, wxPENSTYLE_SOLID);
break;
case PEN_BLACKDASHED:
pen = new wxPen(*GetColour(COLOUR_BLACK), 1, wxPENSTYLE_SHORT_DASH);
break;
case PEN_BLUE:
pen = new wxPen(*GetColour(COLOUR_BLUE), 1, wxPENSTYLE_SOLID);
break;
case PEN_CYAN:
pen = new wxPen(*GetColour(COLOUR_CYAN), 1, wxPENSTYLE_SOLID);
break;
case PEN_GREEN:
pen = new wxPen(*GetColour(COLOUR_GREEN), 1, wxPENSTYLE_SOLID);
break;
case PEN_YELLOW:
pen = new wxPen(*GetColour(COLOUR_YELLOW), 1, wxPENSTYLE_SOLID);
break;
case PEN_GREY:
pen = new wxPen(wxColour(wxT("GREY")), 1, wxPENSTYLE_SOLID);
break;
case PEN_LIGHTGREY:
pen = new wxPen(*GetColour(COLOUR_LIGHTGREY), 1, wxPENSTYLE_SOLID);
break;
case PEN_MEDIUMGREY:
pen = new wxPen(wxColour(wxT("MEDIUM GREY")), 1, wxPENSTYLE_SOLID);
break;
case PEN_RED:
pen = new wxPen(*GetColour(COLOUR_RED), 1, wxPENSTYLE_SOLID);
break;
case PEN_TRANSPARENT:
pen = new wxPen(*GetColour(COLOUR_BLACK), 1, wxPENSTYLE_TRANSPARENT);
break;
case PEN_WHITE:
pen = new wxPen(*GetColour(COLOUR_WHITE), 1, wxPENSTYLE_SOLID);
break;
default:
wxFAIL;
}
ms_stockObject[item] = pen;
}
return pen;
}
(来自here)
我想是为了向呼叫者报告
new
失败。在远古时代,new
返回NULL
。 (如您所知,如果分配失败,现在new
会抛出std::bad_alloc
。)..,其返回类型为
const wxPen*
。你没看错吗关于c++ - 为什么wxBLACK_PEN是wxPen *?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25423273/