Rolling my own GUI library per un side-project. Refactoring per usare puntatori intelligenti; tuttavia, ho riscontrato un problema.
Sono consapevole del fatto che non si desidera utilizzare i puntatori intelligenti attraverso i limiti della DLL per ovvi motivi. Ma mi sento sporco usando "nuovo" nel codice dell'applicazione. Vedi sotto:
// MYFINANCEAPP.H
class MyFinanceApp : public Application
{
MyFinanceApp() : mMainWindow(make_unique<Window>)
{
mMainWindow->AddControl(new Button("testButton"));
}
private:
std::unique_ptr<Window> mMainWindow;
};
// WINDOW.H
class Window
{
public:
void AddControl(const Control& control) //QUESTION: HOW DO I GET SMART POINTER HERE???
{
mControls.emplace_back(control)
}
private:
std::vector<std::unique_ptr<Control>> mControls; //Want to use smart pointers so I am not responsible for managing...
};
È meglio usare lo stile e la semantica del C ++ 98 e gestirlo da solo. Ovviamente non voglio passare i puntatori intelligenti attraverso il limite dell'interfaccia (ad esempio AddControl), ma non voglio essere responsabile della gestione della durata dei controlli.
Inoltre, mi sento davvero sporco usando "new Button (" testButton ")).