首页 > 试题广场 >

假定T是一个C++类,下列语句执行之后,内存里创建了()个T

[单选题]
【单选】假定T是一个C++类,下列语句执行之后,内存里创建了()个T对象。
T b(5);
T c[6];
T &d = b;
T e=b;
T *p = new T (4);
  • 5
  • 8
  • 9
  • 12
应该是C;T e = b这个调用的是拷贝构造函数,也会创建一个对象,所以一共有9次,由于最后一次new申请内存,没有delete来释放内存,所以只有8次析构函数调用。
#include <iostream>
using namespace std;


class T
{
public:
	T(int m){ cout << "调用构造函数:" << ++num << endl;} //自定义构造函数

	T() { cout << "调用默认构造函数:" << ++num << endl; }  //默认构造函数

	T(T & a){ cout << "调用拷贝构造函数:" << ++num << endl;}//拷贝构造函数

	~T(){cout << "调用析构函数"<<--num << endl;}
private:
	static int num;

};
int T::num = 0;

int main()
{
	T b(5);
	T c[6];
	T& d = b;
	T e = b;
	T* p = new T(4);
	return 0;
}

编辑于 2021-03-17 15:09:34 回复(0)
拷贝构造函数一样是构造函数 肯定创建对象 答案有误 是九次
发表于 2020-12-31 08:41:16 回复(0)
个人理解,1+6(数组)+0(引用)+1(拷贝构造)+1(new)=9;这里区分一下,拷贝构造包含新对象创建+拷贝,而赋值只是拷贝~
发表于 2021-04-25 16:36:21 回复(0)
引用不算一个新的对象,临时对象和无名对象会自动回收。
争议可能在T e = b,试了下,如果没有复制构造函数,那么T e = b,就没有创建新对象。按理应该调用默认复制构造函数,可能编译器优化了,不太懂。
#include <iostream> 
using namespace std;
class A
{
private:
    int n;
public:
    A() 
    {
        cout << "A()" << endl;
    }
    A(int m) :n(m)
    {
        cout << "A(int m)" << endl;
    }
    A(const A& copy) {
        cout << "A(const A&copy)" << endl;
    }
    ~A() {}
};
int main()
{
    A a(1);  //栈中分配 
    A b = A(1);  //栈中分配 
    A* c = new A(1);  //堆中分配 
    delete c;
    A d = a;
    A e(d);
    A f;

    return 0;
}

下面是注释掉复制构造函数的代码和结果:

#include <iostream> 
using namespace std;
class A
{
private:
    int n;
public:
    A() 
    {
        cout << "A()" << endl;
    }
    A(int m) :n(m)
    {
        cout << "A(int m)" << endl;
    }
/*   A(const A& copy) {
        cout << "A(const A&copy)" << endl;
    }
*/
    ~A() {}
};
int main()
{
    A a(1);  //栈中分配 
    A b = A(1);  //栈中分配 
    A* c = new A(1);  //堆中分配 
    delete c;
    A d = a;
    A e(d);
    A f;

    return 0;
}


编辑于 2020-08-14 18:23:04 回复(12)
1+6(数组)+0(引用)+1(拷贝构造)+1(new)=9
发表于 2023-04-07 10:17:37 回复(0)
浅拷贝创建对象,但是共用内存
发表于 2023-02-23 16:36:23 回复(0)
T& d = b; 是对 b 的引用,不会新建类对象
发表于 2022-09-03 23:07:02 回复(0)
求大佬们解答,为啥我算是8次呢?new 不是在堆里开辟空间吗?新人求解
发表于 2021-04-08 19:07:48 回复(2)