【发布时间】:2011-12-08 11:29:37
【问题描述】:
我知道我无法获得本地变量的引用。如:
int& func1()
{
int i;
i = 1;
return i;
}
而且我知道这是正确的,但我必须在调用 func2() 后删除它
int* func2()
{
int* p;
p = new int;
*p = 1;
return p;
}
int main()
{
int *p = func2();
cout << *p << endl;
delete p;
return 0;
}
如果函数是这样的:
MyClass MyFunction()
{
return new MyClass;
}
MyClass 的完整定义是:
class MyClass
{
public:
MyClass() : num(1){}
MyClass(MyClass*) : num(10){}
int num;
};
这会导致内存泄漏吗?
我应该如何避免它? 该函数返回一个对象而不是指针,那么我该如何删除它呢?
PS:代码来自《Ruminations on C++》一书第 10 章。 原代码为:
Picture frame(const Pictrue& pic)
{
// Picture has a constructor Picture(*P_Node)
// Frame_Pic derives from P_Node
// So the constructor Picture(*P_Node) will implicitly convert Frame_Pic to Picture.
return new Frame_Pic(pic);
}
【问题讨论】:
-
MyClass MyFunction() { return new MyClass; }不会编译,所以不:它不会泄漏内存! -
@Johnsyweb 除非
MyClass有一个接受MyClass*(或其子类)的非显式构造函数。 -
@Motti:公平点。没有什么可以暗示它,但你可能是对的。
-
@Johnsyweb 你是对的(这就是我对你的评论投赞成票的原因),但永远不要说我没有挑剔。
-
@Johnsyweb 我忘了发布非显式构造函数。这次函数将符合要求。如何删除对象?
标签: c++ local-variables