【发布时间】:2010-12-16 17:28:44
【问题描述】:
我正在用指针做一些时髦的事情,我担心我可能会让自己面临一些指针问题:
#include <iostream>
class Vector2
{
private:
double x;
double y;
public:
Vector2(double x, double y)
{
this->x = x;
this->y = y;
}
Vector2(double coords[2])
{
x = coords[0];
y = coords[1];
}
typedef double * const dArr;
operator dArr()
{
double out[2] = {x, y};
return out;
}
};
int main()
{
double ids[2] = {2.3 ,3.3};
Vector2 v = ids;
std::cout << 5 << std::endl;
double vect[2] = {v[0], v[1]};
double * const v2 = v;
std::cout << vect[0] << " " << vect[1] << std::endl;
while(1) { }
return 0;
}
在我的 Vector2 类的操作符 dArr() 函数中,我担心通过返回一个指针,我会面临指针不会被删除并且会导致内存泄漏的问题。我担心是对的,在这种情况下是否有防止内存泄漏的解决方案?任何建议都将受到欢迎。
谢谢。
【问题讨论】:
-
正如答案中所指出的,这不是泄漏,尽管这是一个问题。但是,如果您是泄漏,则可以返回某种智能指针。
-
@David Thornley:如果我在 main() 中为 v2 分配一个新指针,会不会导致旧指针泄露?
-
不,指针是静态分配的,因此当它在 main 结束时超出范围时将被释放。指针指向的内存(通常是你泄漏的)也是静态分配的,并且已经超出范围,所以它已经被释放了!
-
@Kleist:所以指针 v2 最终可能指向一个不包含我期望的内存地址?在某些时候,可能会为该内存位置分配其他东西?
-
是的,它可能会在某个时候。关键是你永远无法确定会发生什么,所以你不应该依赖它。 ;-)