More Effective C++ 条款8

 

条款8:理解各种不同含义的new和delete

人们有时好像喜欢故意使C++语言的术语难以理解。比如说new操作符(new operator)和operator new的区别。

当你写这样的代码:

string *ps = new string("Memory Management");

你使用的newnew操作符。这个操作符就象sizeof一样是语言内置的,你不能改变它的含义,它的功能总是一样的。它要完成的功能分成两部分。第一部分是分配足够的内存以便容纳所需类型的对象。第二部分是它调用构造函数初始化内存中的对象。new操作符总是做这两件事情,你不能以任何方式改变它的行为。

你所能改变的是如何为对象分配内存。new操作符调用一个函数来完成必需的内存分配,你能够重写或重载这个函数来改变它的行为。new操作符为分配内存所调用函数的名字是operator new

函数operator new 通常这样声明:

void * operator new(size_t size);

返回值类型是void*,因为这个函数返回一个未经处理(raw)的指针,未初始化的内存。(如果你喜欢,你能写一种operator new函数,在返回一个指针之前能够初始化内存以存储一些数值,但是一般不这么做。)参数size_t确定分配多少内存。你能增加额外的参数重载函数operator new,但是第一个参数类型必须是size_t。(有关operator new更多的信息参见Effective C++ 条款8至条款10。)

你一般不会直接调用operator new,但是一旦这么做,你可以象调用其它函数一样调用它:

void *rawMemory = operator new(sizeof(string));

操作符operator new将返回一个指针,指向一块足够容纳一个string类型对象的内存。

就象malloc一样,operator new的职责只是分配内存。它对构造函数一无所知。operator new所了解的是内存分配。把operator new 返回的未经处理的指针传递给一个对象是new操作符的工作。当你的编译器遇见这样的语句:

string *ps = new string("Memory Management");

它生成的代码或多或少与下面的代码相似(更多的细节见Effective C++条款8和条款10,还有我的文章Counting object里的注释。):

void *memory =                              // 得到未经处理的内存

  operator new(sizeof(string));             // String对象

call string::string("Memory Management")    //初始化

on *memory;                                 // 内存中

                                            // 的对象

string *ps =                                // </

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
更有效的C指的是更有效地使用C语言编程的技巧和技术。C语言是一种古老但广泛使用的编程语言,它在系统级编程和高性能应用程序开发中具有广泛的应用。 首先,更有效的C编程意味着更优化的代码。程序员可以通过使用更高效的算法和数据结构来提高代码的性能。此外,还可以通过减少变量的使用、优化内存管理和减少函数调用等方式来提高代码的效率。 其次,更有效的C编程还包括更好的代码组织和结构。通过使用适当的模块化和抽象化技术,可以使代码更可读和可维护。良好的代码结构可以提高团队合作的效率,并减少错误和调试的时间。 另外,更有效的C编程也体现在更好的错误处理和异常处理机制。通过正确处理错误和异常,可以提高程序的健壮性和可靠性。这包括使用适当的错误代码和错误消息来有效地调试和定位问题。 此外,编写高效的C代码还需要充分利用编译器的优化功能。通过了解编译器的工作原理和使用适当的编译选项,可以提高代码的执行速度和运行效率。 最后,更有效的C编程还需要注重维护和优化代码。程序员需要根据需求和反馈周期性地进行代码优化和重构。这可以帮助改进代码的可读性、可维护性和性能。 总的来说,更有效的C编程意味着更优化的代码、更好的代码组织和结构、更好的错误处理和异常处理、充分利用编译器的优化功能以及定期的代码维护和优化。通过这些技术和实践,可以提高C编程的效率和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值