<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>
Gotcha #63: Confusing Scope and Activation of Member new and delete<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
Gotcha条款63:Member New和Member Delete之生存期与活动空间的迷惑
当一个类别的对象被创建和销毁时,其所声明的member operator new和member operator delete会被唤起。施行分配的表达式所处的实际生存空间(scope)与此无关:
class String {
public:
void *operator new( size_t ); // member operator new
void operator delete( void * ); // member operator delete
void *operator new[]( size_t ); // member operator new[]
void operator delete [] ( void * ); // member operator delete[]
String( const char * = "" );
// . . .
};
void f() {
String *sp = new String( "Heap" ); // 使用 String::operator new
int *ip = new int( 12 ); // 使用 ::operator new
delete ip; // 使用 :: operator delete
delete sp; // 使用 String::delete
}
分配操作所处的生存空间无关大局,只有被分配对象的型别才真正决定哪一个分配函数被调用:
String::String( const char *s )
: s_( strcpy( new char[strlen(s)+1], s ) )
{}
字符数组在class String的scope内被分配内存,但分配使用的是global array new,而非String的那个array new——因为型别不同,char并不是String。经由显式的限定(explicit qualification),我们可以这样做:
String::String( const char *s )
: s_( strcpy( reinterpret_cast<char><p></p></char>
(String::operator new[](strlen(s)+1 )),s ) )
{}
如果我们能够使用形如String::new char[strlen(s)+1]的语句来调用String的operator new[]就好了,但这是非法的,行不通。(尽管我们可以使用::new的形式来调用global operator new和global operator new[],使用::delete的形式来调用global operator delete和global operator delte[]。)
相关推荐
C++程序设计陷阱(C++Gotchas)
C++程序设计陷阱(C++Gotchas) 包含中英两个版本
c++程序设计陷阱,中英文都有的哦,很有用的
C++ Gotchas Avoiding Common Problems in Coding and Design 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
C + +的陷阱
Thinking in C++ Accelerated C++ C++ Gotchas C++初学者50个忠告中提及的资料整理[分10卷下载 每卷50M]\C++初学者50个忠告中提及的资料整理[分10卷下载每卷50M].part01
vc编程系列之Addison Wesley - C++ Gotchas
Addison Wesley - C++ Gotchas .chm 好书不用多说~~~
本人搜集了C++四书五经中提到的所有26本书,并按照分类分别上传了7个文件,包括: 1. TCPL和D&E 2. 入门教程 3. 高效健壮编程 4. 模板和泛型编程 5. 标准库 6. 网络编程 7. 杂项(因这个文件太大,分成了2个) 与...
C++很精彩的错误集锦
本人搜集了C++四书五经中提到的所有26本书,并按照分类分别上传了7个文件,包括: 1. TCPL和D&E 2. 入门教程 3. 高效健壮编程 4. 模板和泛型编程 5. 标准库 6. 网络编程 7. 杂项(因这个文件太大,分成了2个) 与...
本人搜集了C++四书五经中提到的所有26本书,并按照分类分别上传了7个文件,包括: 1. TCPL和D&E 2. 入门教程 3. 高效健壮编程 4. 模板和泛型编程 5. 标准库 6. 网络编程 7. 杂项(因这个文件太大,分成了2个) 与...
本人搜集了C++四书五经中提到的所有26本书,并按照分类分别上传了7个文件,包括: 1. TCPL和D&E 2. 入门教程 3. 高效健壮编程 4. 模板和泛型编程 5. 标准库 6. 网络编程 7. 杂项(因这个文件太大,分成了2个) 与...
本人搜集了C++四书五经中提到的所有26本书,并按照分类分别上传了7个文件,包括: 1. TCPL和D&E 2. 入门教程 3. 高效健壮编程 4. 模板和泛型编程 5. 标准库 6. 网络编程 7. 杂项(因这个文件太大,分成了2个) 与...
本人搜集了C++四书五经中提到的所有26本书,并按照分类分别上传了7个文件,包括: 1. TCPL和D&E 2. 入门教程 3. 高效健壮编程 4. 模板和泛型编程 5. 标准库 6. 网络编程 7. 杂项(因这个文件太大,分成了2个) 与...
[AddisonWesley]C++_Gotchas.zip
好的C++ 图书,帮你更加了解C++,希望你学习C++更加愉快