当前位置: 首页 > wzjs >正文

免费网站转appwordpress增加模板

免费网站转app,wordpress增加模板,友情链接查询,敬请期待是什么意思1.C 动态内存分配对比 在 C 中,malloc/free 和 new/delete 都可以用于动态内存分配,但它们有显著的区别。以下是它们在多个维度的对比,并附带示例说明。 特性malloc/freenew/delete类型安全❌ 需要显式类型转换✅ 类型安全,自动…

1.C++ 动态内存分配对比

在 C++ 中,malloc/freenew/delete 都可以用于动态内存分配,但它们有显著的区别。以下是它们在多个维度的对比,并附带示例说明。

特性malloc/freenew/delete
类型安全❌ 需要显式类型转换✅ 类型安全,自动推导类型
构造/析构函数❌ 不会调用构造或析构函数✅ 会调用构造函数和析构函数
返回值类型void*,需要强转返回具体类型指针,无需转换
错误处理机制分配失败返回 nullptr默认抛出 std::bad_alloc,可用 nothrow 方式改为返回 nullptr
多态支持❌ 无多态性,释放对象不会触发虚析构✅ 支持多态,虚析构函数可正确调用
内存释放方式free(p)delete p(或 delete[] p
数组分配支持❌ 需要手动计算内存大小✅ 使用 new Type[n] 分配,自动构造 n 个对象
内存分配与释放对应性必须使用 free 释放由 malloc 分配的内存必须使用 delete 释放由 new 分配的内存

1. 类型安全

malloc/free:

需要显式类型转换,不具备类型安全。

int* p = (int*)malloc(sizeof(int)); // 需要强制类型转换

new/delete:

类型安全,自动推导类型。

int* p = new int; // 类型自动推导

2. 构造与析构函数调用

malloc/free:

不会调用构造函数或析构函数。

class Test {
public:Test() { std::cout << "构造函数\n"; }~Test() { std::cout << "析构函数\n"; }
};Test* t = (Test*)malloc(sizeof(Test)); // 不会输出任何信息
free(t); // 也不会调用析构函数

new/delete:

自动调用构造函数和析构函数。

Test* t = new Test(); // 输出:构造函数
delete t;             // 输出:析构函数

3. 返回值类型

malloc/free:

返回 void*,需要强制转换。

int* p = (int*)malloc(sizeof(int));

new/delete:

返回具体类型指针,无需转换。

int* p = new int;

4. 错误处理机制

malloc/free:

分配失败返回 nullptr,需要手动判断。

int* p = (int*)malloc(sizeof(int));
if (!p) {// 处理错误
}

new/delete:

默认抛出 std::bad_alloc 异常,但可通过 nothrow 返回 nullptr

try {int* p = new int;
} catch (std::bad_alloc& e) {std::cout << "分配失败: " << e.what() << "\n";
}int* p = new (std::nothrow) int;
if (!p) {// 分配失败
}

5. 多态支持

malloc/free:

不支持多态,虚析构函数不会调用。

class Base {
public:virtual ~Base() { std::cout << "Base析构\n"; }
};
class Derived : public Base {
public:~Derived() { std::cout << "Derived析构\n"; }
};Base* obj = (Base*)malloc(sizeof(Derived));
free(obj); // 不调用析构函数

new/delete:

支持多态,虚析构函数能正常调用。

Base* obj = new Derived();
delete obj; // 正确调用 Derived 和 Base 的析构函数

6. 内存释放方式

malloc/free:

使用 free(p)

int* p = (int*)malloc(sizeof(int));
free(p);

new/delete:

使用 delete pdelete[] p

int* p = new int;
delete p;

7. 数组分配支持

malloc/free:

手动计算大小,无构造函数支持。

int* arr = (int*)malloc(sizeof(int) * 10);
free(arr);

new/delete:

使用 new Type[n],支持自动构造每个对象。

int* arr = new int[10];
delete[] arr;

8. 内存分配与释放必须对应

malloc/free:

必须配对使用。

int* p = (int*)malloc(sizeof(int));
free(p); // OK
// delete p; // 错误!

new/delete:

也必须配对使用。

int* p = new int;
delete p; // OK
// free(p); // 错误!

2nullptr vs NULL

nullptrNULL 都表示“空指针”,但它们的底层机制、类型安全性和推荐用法在 C++ 中是有差别的,尤其是在现代 C++(C++11 以后)中:


✅ 简明对比:nullptr vs NULL

比较点nullptrNULL
所在语言只在 C++ 中(从 C++11 起)C 和 C++ 都有
类型std::nullptr_t通常是 0(void*)0
类型安全✅ 类型安全(不会误配)❌ 可能引起重载歧义
推荐程度✅ 强烈推荐在 C++ 中使用仅建议在 C 中使用
兼容函数重载✅ 正确调用指针版本❌ 可能调用错误的重载版本

📌 示例:看出区别的关键例子

🎯 示例 1:重载歧义

void f(int);
void f(char*);f(NULL);     // ⚠️ 可能调用 f(int),不是你想要的!
f(nullptr);  // ✅ 一定调用 f(char*),因为类型安全
  • NULL 是个整数常量(通常是 0),所以可能匹配到 int 版本。
  • nullptr 是一个专门的空指针类型,不可能匹配 int,只能匹配指针。

🎯 示例 2:类型检查

int* p = nullptr;  // ✅ OK
int* q = NULL;     // ⚠️ 也行,但是隐式从 int 转指针

✅ 总结:什么时候用哪个?

场景推荐用法
写 C++ 代码nullptr
写 C 代码NULL
写 C++ 98/03NULL(但注意类型风险)

文章转载自:

http://4nCbPyRL.fLxgx.cn
http://XqqlGCsH.fLxgx.cn
http://HXqOUw4C.fLxgx.cn
http://PTj220V2.fLxgx.cn
http://QJZTeGvk.fLxgx.cn
http://H6VsoeOQ.fLxgx.cn
http://jYsIWMBJ.fLxgx.cn
http://DZeYUaew.fLxgx.cn
http://6ZxFBsw4.fLxgx.cn
http://aIWzxS5I.fLxgx.cn
http://mnRwLSJV.fLxgx.cn
http://ENQo7gpo.fLxgx.cn
http://y6DtsS2H.fLxgx.cn
http://gTIrEsPF.fLxgx.cn
http://k4TTupLw.fLxgx.cn
http://wEjLbReF.fLxgx.cn
http://KIm4diV0.fLxgx.cn
http://wluDdpmT.fLxgx.cn
http://JsvLz6NN.fLxgx.cn
http://MOTXm6cf.fLxgx.cn
http://iZwUhjq0.fLxgx.cn
http://LOjqwZVN.fLxgx.cn
http://wCgexr0n.fLxgx.cn
http://3oDrAQPJ.fLxgx.cn
http://OL8jA4De.fLxgx.cn
http://Wpmw4jIg.fLxgx.cn
http://Dk0asU99.fLxgx.cn
http://7e4Oimeo.fLxgx.cn
http://MvQyZK0B.fLxgx.cn
http://moQIofyb.fLxgx.cn
http://www.dtcms.com/wzjs/633947.html

相关文章:

  • 长沙网站主机企业网站建设可行性分析任务
  • 易企秀可以做微网站吗谷歌浏览器怎么关闭2345网址导航
  • 三合一网站指的是什么企业微信公众号开发
  • 掌握商务网站建设策略网站302怎么做
  • seo站群优化技术网站管理系统改不了的
  • 常州免费企业网站建设网络设计的原则有哪些
  • 深圳一元网站建设公司wordpress 分类目录里
  • 重庆响应式网站平台wordpress新主题去版权
  • 美术馆网站建设概述响应式网站建设智能优化
  • 网站建设课程感想网页设计师技术水平证书
  • 西安网站制作模板连云港建网站
  • 公司网站开发费分录是建网站哪家好案例
  • 编辑网站绑定 主机名养殖场网站源码
  • 阿里云做网站可以吗如何制作课程网站模板
  • 网站建设赚钱seo网站推广工作内容
  • 全网网站建设推广经典网站模板
  • 网站建设哪家好就推 鹏博资讯洛阳网站搭建
  • wap网站建设多少钱天猫商城官网首页
  • 网站开发和网站建设有什么不同wordpress 访问者
  • 外贸联系网站网站建设电
  • wordpress有哪些网站吗seo排名点击软件
  • 做淘宝客最大的网站是叫什么名字免费开放代理
  • 德兴网站建设公司旅游网站 系统
  • 区块链的网站怎么做网站开发 顺德
  • 汉语资源建设相关网站wordpress amp
  • 成都企业网站怎么做罗定市城乡规划建设局网站
  • 乐山建设企业网站上海今天新闻综合频道
  • 网站转移 备案阳江房产网二手房
  • 建站平台的基础概念商务网站制作工程师
  • 石家庄酒店网站建设做网站骗老外的钱