【发布时间】:2015-01-14 01:42:19
【问题描述】:
如果我在 main 中声明一个对象,然后调用该类的成员函数(在函数内部,我使用 operator new 来声明另一个类的对象),该嵌套对象在成员函数调用后是否仍保留在范围内?换句话说,我可以在整个 main 中使用该对象吗?我打算创建一个指针向量,并为每个位置分配一个由类的函数调用创建的新对象。
提前谢谢你!如果我的问题含糊不清,请告诉我。 附言如果我必须在 .h 文件中定义析构函数以删除用 new 创建的内容,对吗?这不是由编译器自动完成的吗?
int main()
{
Ship *list[5] = { 0, 0, 0, 0, 0 };
char ch;
int x1,y1,x2,y2;
int n = 0;
cin >> ch >> x1 >> y1 >> x2 >> y2;
while ( cin )
{
try
{
Ship *p = Ship::makeShip(ch,x1,y1,x2,y2);
list[n++] = p;
}
在我的程序中,makeShip 返回一个指向新 Ship 对象的指针。为什么我可以在我的 main() 中使用 Ship 对象?我认为它在第二个 } 结束大括号之后超出了尝试范围?谢谢!!
【问题讨论】:
-
你可以通过显示一些代码来让你的问题不那么模糊
-
为了简单起见新分配内存,所以如果您没有丢失地址,您可以在程序中的任何位置使用该对象,直到您删除它或丢失它(内存泄漏)
-
有道理。谢谢。
-
要调用 Ship 析构函数,您必须使用智能指针,例如
std::unique_ptr<Ship> list[5]; -
@TonyD 对不起,我读到了
cout
标签: c++ arrays constructor scope destructor