首页 > 试题广场 >

Which is the correct outp

[单选题]
Which is the correct output of the following program.
#include <iostream>
#include <string>
using namespace std;

class ObjectCount{
private:
    static int objCount;
public:
    ObjectCount() { objCount++; }
    static void print(const string& msg = "") {
        if(msg.size() != 0) cout << msg << ": ";
        cout << "objCount = " << objCount << endl;
    }    
    ~ObjectCount() { objCount--; }
};

int ObjectCount::objCount = 0;

ObjectCount f(ObjectCount oc) {
    return oc;
}

int main(){
    ObjectCount o1;
    ObjectCount::print("after construction of o1");
    ObjectCount o2 = f(o1);
    ObjectCount::print("after call f()");
}

  • after construction of o1: objCount = 1
    
    after call f(): objCount = 0
  • after construction of o1: objCount = 1
    
    after call f(): objCount = 1
  • after construction of o1: objCount = 1
    
    after call f(): objCount = 2
  • after construction of o1: objCount = 1
    
    after call f(): objCount = 3
ObjectCount o2 = f(o1); 调用复制构造函数 函数结束调用析构函数 objCount--
发表于 2021-09-14 18:33:33 回复(0)
ObjectCount o2 = f(o1);会调用两次拷贝构造函数,一次是传参,一次是返回,对应会调用两次析构函数。而objCount++只出现在普通构造函数,所以不会被拷贝构造函数执行,objCount--则会被执行两次。
而o1,o2初始化时会调用普通构造函数,objCount++会被执行。所以,++执行了两次,--执行了两次,结果是0。至于o1,o2的析构是在结果输出之后进行的,所以--执行次数是2不是4.
发表于 2022-09-15 13:20:02 回复(0)