`
阿尔萨斯
  • 浏览: 4110499 次
社区版块
存档分类
最新评论

C++ Gotchas 条款63:Member New和Member Delete之生存期与活动空间的迷惑

 
阅读更多
<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条款63Member NewMember Delete之生存期与活动空间的迷惑

当一个类别的对象被创建和销毁时,其所声明的member operator newmember 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 Stringscope内被分配内存,但分配使用的是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]的语句来调用Stringoperator new[]就好了,但这是非法的,行不通。(尽管我们可以使用::new的形式来调用global operator newglobal operator new[],使用::delete的形式来调用global operator deleteglobal operator delte[]。)




分享到:
评论

相关推荐

    C++程序设计陷阱(C++Gotchas)

    C++程序设计陷阱(C++Gotchas)

    C++程序设计陷阱(C++Gotchas) 中英两个版本

    C++程序设计陷阱(C++Gotchas) 包含中英两个版本

    [CS]C++ Gotchas

    c++程序设计陷阱,中英文都有的哦,很有用的

    C++ Gotchas Avoiding Common Problems in Coding and Design epub

    C++ Gotchas Avoiding Common Problems in Coding and Design 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    C++ Gotchas

    C + +的陷阱

    Thinking in C++ Accelerated C++ C++ Gotchas

    Thinking in C++ Accelerated C++ C++ Gotchas C++初学者50个忠告中提及的资料整理[分10卷下载 每卷50M]\C++初学者50个忠告中提及的资料整理[分10卷下载每卷50M].part01

    vc编程系列之Addison Wesley - C++ Gotchas

    vc编程系列之Addison Wesley - C++ Gotchas

    C++ Gotchas .chm

    Addison Wesley - C++ Gotchas .chm 好书不用多说~~~

    C++四书五经 - 01. TCPL和D&E

    本人搜集了C++四书五经中提到的所有26本书,并按照分类分别上传了7个文件,包括: 1. TCPL和D&E 2. 入门教程 3. 高效健壮编程 4. 模板和泛型编程 5. 标准库 6. 网络编程 7. 杂项(因这个文件太大,分成了2个) 与...

    C++ gotchas(c++覆辙录英文版)

    C++很精彩的错误集锦

    C++四书五经 - 04. 模板和泛型编程

    本人搜集了C++四书五经中提到的所有26本书,并按照分类分别上传了7个文件,包括: 1. TCPL和D&E 2. 入门教程 3. 高效健壮编程 4. 模板和泛型编程 5. 标准库 6. 网络编程 7. 杂项(因这个文件太大,分成了2个) 与...

    C++四书五经 - 05. 标准库

    本人搜集了C++四书五经中提到的所有26本书,并按照分类分别上传了7个文件,包括: 1. TCPL和D&E 2. 入门教程 3. 高效健壮编程 4. 模板和泛型编程 5. 标准库 6. 网络编程 7. 杂项(因这个文件太大,分成了2个) 与...

    C++四书五经 - 07. 杂项-02

    本人搜集了C++四书五经中提到的所有26本书,并按照分类分别上传了7个文件,包括: 1. TCPL和D&E 2. 入门教程 3. 高效健壮编程 4. 模板和泛型编程 5. 标准库 6. 网络编程 7. 杂项(因这个文件太大,分成了2个) 与...

    C++四书五经 - 03. 高效健壮编程

    本人搜集了C++四书五经中提到的所有26本书,并按照分类分别上传了7个文件,包括: 1. TCPL和D&E 2. 入门教程 3. 高效健壮编程 4. 模板和泛型编程 5. 标准库 6. 网络编程 7. 杂项(因这个文件太大,分成了2个) 与...

    C++四书五经 - 07. 杂项-01

    本人搜集了C++四书五经中提到的所有26本书,并按照分类分别上传了7个文件,包括: 1. TCPL和D&E 2. 入门教程 3. 高效健壮编程 4. 模板和泛型编程 5. 标准库 6. 网络编程 7. 杂项(因这个文件太大,分成了2个) 与...

    [AddisonWesley]C++_Gotchas.zip

    [AddisonWesley]C++_Gotchas.zip

    C.Gotchas (C++ 图书)

    好的C++ 图书,帮你更加了解C++,希望你学习C++更加愉快

Global site tag (gtag.js) - Google Analytics