前端学习C++之:创建对象

之前的文章理解了#include和namespace,当读到源码13行的时候,懵了,这句代码是什么意思,如果是创建对象的话为什么没有new,如果是申明变量的话为什么没有变量名和等于号

1. C++对象创建语法分析

arduino 复制代码
// Canvas canvas("Helpers"); 的语法结构:
// ┌─────────┐ ┌──────┐ ┌───────────┐
// │ Canvas  │ │canvas│ │("Helpers")│
// │  类型   │ │变量名│ │构造函数参数│
// └─────────┘ └──────┘ └───────────┘
// 这确实是创建对象,也确实是声明变量
//
// 这相当于JavaScript中的: const canvas = new Canvas("Helpers");

为什么没有 new?

  • 在C++中,new 是用于堆上创建对象的
  • Canvas canvas("Helpers"); 是栈上创建对象(更常用,自动管理内存)
  • 相当于JavaScript中的自动垃圾回收

为什么没有等号?

  • 这是C++的直接初始化语法,更高效
  • 等价写法:Canvas canvas = Canvas("Helpers"); (但效率较低)
  • C++编译器会直接调用构造函数,不需要等号

变量名在哪里?

  • canvas 就是变量名!
  • C++不需要 var/let/const 关键字
  • 类型名(Canvas)已经说明了变量的性质

2. C++有两种创建对象的方式

方式1:栈上创建(自动内存管理)

cppp 复制代码
Canvas canvas("Helpers");

方式2:堆上创建(需要手动管理内存)

cpp 复制代码
Canvas* canvas = new Canvas("Helpers");  // 需要后续调用 delete canvas;

JavaScript: 所有对象都在堆上,但有垃圾回收器自动管理

js 复制代码
const canvas = new Canvas("Helpers"); // 堆上创建 + 自动垃圾回收

3. JavaScript vs C++ 对象创建方式

css 复制代码
// JavaScript:                    C++:
// ─────────────────────────────  ─────────────────────────────
// const canvas = new Canvas();   Canvas canvas;                  // 默认构造
// const canvas = new Canvas(x);  Canvas canvas(x);               // 带参数构造  ←当前使用
// const canvas = new Canvas(x);  Canvas canvas{x};               // 列表初始化
// const canvas = new Canvas(x);  Canvas* canvas = new Canvas(x); // 堆上创建
相关推荐
羑悻的小杀马特2 分钟前
etcd实战指南:从安装集群到C++封装,解锁分布式服务治理的“钥匙”
c++·分布式·etcd·集群
星火开发设计5 分钟前
C++ deque 全面解析与实战指南
java·开发语言·数据结构·c++·学习·知识
cnxy1886 分钟前
Python Web开发新时代:FastAPI vs Django性能对比
前端·python·fastapi
神仙姐姐QAQ7 分钟前
vue3更改.el-dialog__header样式不生效
前端·javascript·vue.js
脾气有点小暴7 分钟前
uniapp真机调试无法连接
前端·uni-app
点云SLAM8 分钟前
C++设计模式之单例模式(Singleton)以及相关面试问题
c++·设计模式·面试·c++11·单例模式(singleton)
AI_56789 分钟前
Vue.js 深度开发指南:从数据绑定到状态管理的最佳实践
前端·javascript·vue.js
Irene19919 分钟前
Sass常用语法总结
前端·sass
程序员爱钓鱼10 分钟前
Node.js 博客系统实战(一):项目需求分析
前端·后端·node.js
阿星AI工作室11 分钟前
魔改豆包输入法变电脑版,立即拥有千元AI语音输入法typeless平替
前端·人工智能