C++ && keyWordSpotting
int* pi = new int(0);
if ( pi != 0 ) delete pi;
说明:如果指针操作数被设置为0,则C++保证delete表达式不会调用操作符delete()。所以没有必要测试其是否为0。 在delete表达式之后,pi被称作空悬指针,即指向无效内存的指针。空悬指针是程序错误的根源,建议对象释放后,将该指针设置为0。 2)auto_ptr auto_ptr是C++标准库提供的类模板,它可以帮助程序员自动管理用new表达式动态分配的单个对象,但是,它没有对数组管理提供类似支持。它的头文件为:
当auto_ptr对象的生命期结束时,动态分配的对象被自动释放。 auto_ptr类模板背后的主要动机是支持与普通指针类型相同的语法,但是为auto_ptr对象所指对象的释放提供自动管理。例:
// 第一种初始化形式 std::auto_ptr< int > pi( new int (1024) ); //
auto_ptr 类模板支持所有权概念,当一个auto_ptr对象被用另一个auto_ptr对象初始化赋值时,左边被赋值或初始化的对象就拥有了空闲存储区内底层对象的所有权,而右边的auto_ptr对象则撤消所有责任。例:
std::auto_ptr<std:: string > pstr_auto( new std:: string ( "Brontonsaurus" ) ); // 第二种初始化形式 std::auto_ptr<std:: string > pstr_auto2( pstr_auto );
判断是否指向一个对象,例:
3)数组的动态分配与释放 建议使用C++标准库string,避免使用C风格字符串数组。 为避免动态分配数组的内存管理带来的问题,一般建议使用标准库vector、list或string容器类型。 4)常量对象的动态分配与释放 可以使用new表达式在空闲存储区内创建一个const对象,例:
// 此时必须初始化,否则编译错误 const int * pci = new const int (1024);
我们不能在空闲存储区创建内置类型元素的const数组,原因是:我们不能初始化用new表达式创建的内置类型数组的元素。例:
const int * pci = new const int [100]; // 编译错误
5 )定位new表达式 new表达式的第三种形式允许程序员要求将对象创建在已经被分配好的内存中。称为:定位new表达式(placement new expression)。程序员在new表达式中指定待创建对象所在的内存地址。如下所示: new (place_address) type-specifier 注意:place_address必须是个指针,必须包含头文件<new>。这项设施允许程序员预分配大量的内存,供以后通过这种形式的new表达式创建对象。例如:
Copyright @ keyws Powered by: .Text and ASP.NET Theme by: .NET Monster