You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++指针赋值疑问:vector<CreditCard*>赋值逻辑及new关键字作用

问题核心原因解答

  • 你产生误解的核心是没搞清楚new关键字的返回值类型:new 类名(构造参数)整个表达式的返回值是对应类的指针类型,而不是类对象本身,刚好和你定义的vector<CreditCard*>的元素类型完全匹配,不存在类型不匹配的问题。

new关键字的具体作用

在C++中使用new创建类实例时,会按顺序完成三件事:

  1. 在程序的**堆内存(自由存储区)**中申请一块大小刚好能容纳该类实例的内存空间
  2. 用你传入的构造参数调用对应类的构造函数,将刚申请的内存初始化为合法的类对象
  3. 返回指向这块堆内存的指针,指针类型和创建的类对应,也就是这里的CreditCard*

所以你代码里的赋值操作,本质上是把new返回的指针存到vector的对应位置,vector里存的始终是指针,没有存实际的CreditCard对象,对象本身是存放在堆内存里的。


额外注意事项

通过new申请的堆内存不会在变量生命周期结束时自动释放,如果你后续不用这些CreditCard对象了,需要手动调用delete释放对应的指针,否则会出现内存泄漏:

// 释放示例
for (int i = 0; i < wallet.size(); ++i) {
    if (wallet[i] != nullptr) {
        delete wallet[i];
        wallet[i] = nullptr;
    }
}

现在工业界的C++项目中大多会使用智能指针(比如std::unique_ptr<CreditCard>)代替裸指针,不需要手动管理内存,能有效避免内存泄漏问题。教材里使用裸指针是为了更清晰地讲解指针和内存管理的底层逻辑。


内容的提问来源于stack exchange,提问作者kaiyu wei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:45:10