【发布时间】:2021-12-06 02:01:20
【问题描述】:
我正在使用构造函数和析构函数进行测试,我想看看是否可以在不先声明的情况下将对象传递给函数,例如以下示例:
#include<iostream>
#include<stdlib.h>
using namespace std;
class car
{
public:
string name;
int num;
public:
car(string a, int n)
{
cout << "Constructor called" << endl;
this->name = a;
this->num = n;
}
~car()
{
cout << "Deleted" << endl;
}
};
void display(car* p)
{
cout << "Name: " << p->name << endl;
cout << "Num: " << p->num << endl;
}
int main()
{
display(new car("HYUNDAI", 2012));
}
display 函数工作正常,它完全符合我的预期,但我想知道:
- 如果我在
display的输入中声明了new关键字,为什么我的用户定义的析构函数没有被调用,并且 -
new会导致内存泄漏吗?
【问题讨论】:
-
您使用什么资源来学习 C++?在
display中使用new没有意义,“声明new关键字”这句话也没有意义。任何体面的书或课程都应该告诉您诸如对象生命周期和指针之类的事情,这将帮助您理解这里的问题以及为什么会出现泄漏。也许您可能需要投资some good books? -
您将
string和int传递给构造函数,并将car*传递给display,但没有先声明它们中的任何一个。 -
考虑使用自动变量并将
display()设为car成员函数。 example
标签: c++ class constructor memory-leaks destructor