【发布时间】:2022-01-05 03:47:48
【问题描述】:
我对指针感到困惑。如下代码所示,CreditCard 是在头文件中定义的一个类,我们定义了一个包含 10 个 CreditCard 指针的向量。定义后,我们为向量分配 3 张新卡片。很明显,向量的元素应该是指向 CreditCard 的类型指针,但是我们实际上分配的是 CredicCard 对象而不是指向它的指针。此外,每张信用卡前面的“新”是什么?谁能给我解释一下?谢谢!
(代码来自 Michael T. Goodrich(作者)、Roberto Tamassia(作者)、David M. Mount(作者)的 Data Structures and Algorithms in C++ 2nd Edition)
vector<CreditCard*> wallet(10); // vector of 10 CreditCard pointers
// allocate 3 new cards
wallet[0] = new CreditCard("5391 0375 9387 5309", "John Bowman", 2500);
wallet[1] = new CreditCard("3485 0399 3395 1954", "John Bowman", 3500);
wallet[2] = new CreditCard("6011 4902 3294 2994", "John Bowman", 5000);
【问题讨论】:
-
new- "...创建并初始化具有动态存储持续时间的对象,即其生命周期不一定受创建范围限制的对象...。 " , "...new-expression 返回一个指向构造对象的(prvalue)指针..." en.cppreference.com/w/cpp/language/new -
New 为堆上的对象分配内存。但是我不会以这种方式使用向量,我会使用 std::vector
和 wallet.emplace(("5391 0375 9387 5309", "John Bowman", 2500) 并让向量负责所有内存管理对我来说。在现代 C++ 中,不应该大量使用 new/delete。 -
@PepijnKramer 有点太短了;不仅分配内存(这是
operator new所做的,但不应与new表达式混淆),而且还构造对象(即调用构造函数)。 -
你可能想看看good C++ book,应该很早就在那里解释...
-
@aconcagua 是的,你是对的。新的也这样做
标签: c++ arrays class pointers data-structures