策略模式在C++中使用唯一指针,使用for循环



我对C++和指针的概念很陌生,所以我很感激这里的反馈!

目前,我有这样的代码,其中x有一个所有派生类都实现的虚拟函数someFunction()

std::unique_ptr<Base_Class> x = std::unique_ptr<Base_Class>(nullptr);
for (int i = 0; i < someIteration; i++) {
if (condition1) {
x = std::unique_ptr<Derived_Class1>(Derived_Class1());
} 
else if (condition2) {
x = std::unique_ptr<Derived_Class2>(Derived_Class2());
}
// and so on ...
else {
x = std::unique_ptr<Derived_ClassX>(Derived_ClassX());
}

x->someFunction(); // Which calls the derived class's function
}

**阅读**后编辑了我的问题

因此,在阅读了一些之后,我意识到我的代码类似于策略模式(这本质上是我试图实现的,而不是在我的对象本身上使用动态多态性,这将消除我的条件本身,正如前面提到的注释之一(,只是我没有setStrategy方法,然后我直接创建唯一的指针,并应用我想要的策略。

我将集中讨论主要问题:

在循环结束时,derived_class的指针是否会自动删除(因为我们使用的是智能指针(,因此x变成nullptr?然后它在循环中再次被重新分配给另一个指针(不确定这个词是否正确(?

这样做有什么不对?

for (int i = 0; i < someIteration; i++) {
if (condition1) {
function1();
} 
else if (condition2) {
function2();
}
// and so on ...
else {
default_function();
}
}

最新更新