【发布时间】:2018-12-18 08:42:34
【问题描述】:
我知道它可能与此重复: Changing array inside function in C,但我仔细阅读了它,我想知道一种情况:
void addCustomer(Customer*** array, int length, char type) {
for (int i = 0; i < length; i++) {
Customer *c1 = new Customer();
switch (type) {
case '1':
c1 = new LowCustomer();
break;
case '2':
c1 = new MiddleCustsomer();
break;
case '3':
c1 = new HighCustomer();
break;
case '4':
c1 = new VIPCustomer();
break;
}
(*array)[i] = c1;
}
LowCustomer、MiddelCustomer、HighCustomer 和 VIPCustomer 类都派生自 Customer 类。
因此,由于我必须使用 new 关键字,因此数组现在必须是 ***。有没有更好的办法?因为我的代码在 c1 上使用0xcdcdcdcd 不断产生运行时错误。
我在main 中的代码如下所示:
Customer*** low = new Customer**[10];
addCustomer(low, 10, 'c');
附:哦!顺便说一句,我知道使用 vector 会更容易,但我真的想为此使用指针。
【问题讨论】:
-
请使用std::unique_ptr或std::shared_ptr并尝试使用std::vector
-
这不会解决你的问题,但在效率方面,而不是做
Customer *c1 = new Customer();然后指定类型,你为什么不尝试使用策略设计模式 。例子很多(鸭子是最容易理解的)。 -
何时删除切换前创建的未使用的“客户”实例?您只需覆盖指针并泄漏您的内存。 “***”很火,以前没见过!为什么你标记你的问题 c++?你这里只用C?故意的?哦,“新”是我能看到的唯一 c++...
-
@Hellowhatsup 你能详细说明为什么 std::vector 不能被接受吗?
标签: c++