执行期语意学(Runtime Semantics)

对象的构造和析构(Object Constructor and Destructor)

一般而言,constructor和destructor的安插都如你所预期:

{
    Point point;    //point.Point::Point()  一般而言会被安插在这里
    ...    //point.Point::~Point() 一般而言会被安插在这里}

如果一个区段(译注:以{}括起来的区域)或函数中有一个以上的离开点,情况会稍微混乱一些。Destructor必须被放在每一个离开点(当时object还存活)之前。例如:

{
    Point point;    //constructor在这里行动
    switch(int(point.x())){        case -1 : 
            //mumble;
            //destructor在这里行动
            return;        case 0:            //mumble
            //destructor在这里行动
            return;        default:            //mumble
            //destructor在这里行动
            return;
    }    //destructo
        
		

网友评论