【发布时间】:2014-12-05 04:30:44
【问题描述】:
长期读者第一次海报。搜索这个非常晦涩,所以我找不到任何东西。
任何人,如果我在一个类中声明一个结构。然后我有一个类方法可以创建所述结构的实例,创建的结构实例的生命周期是多少?
例如在我的标题中:
class test_class
{
Public:
void test_function(int, string);
private:
struct test_struct
{
int foo;
string bar;
};
test_struct * storage;
}
然后在test_class.cpp中
void test_function(int num, string name)
{
test_struct t1;
t1.foo = num;
t1.bar = name;
storage = new test_struct [<some_size>];
storage[<some_element>] = t1;
}
所以,我创建了一个 test_class 实例并调用了 test_function。 t1 已创建并成功存储在假设数组中,但它是否仍保存在数组中?或者当函数退出时它会因为范围变化而被删除? t1 是否成为类的成员变量?我需要 t1 作为指向 test_struct 的指针并拥有一个 test_struct 指针数组吗?
提前感谢您的帮助。
【问题讨论】:
-
不要使用指针,而是使用
std::vector<test_struct> storage;。然后一切都会自行处理。 -
不幸的是,我必须这样做。这不是任务本身,而是对想法的简化。我代表一个优先级队列,其堆由数组@.@ 表示
-
A
vector完全符合您的伪代码试图做的事情,只是正确。向量调用new和delete,与您尝试执行的操作没有什么不同(但同样,只是更安全)。 -
明白。不幸的是,我必须使用数组。
-
您的代码使用的是指针,而不是数组。再次阅读我的评论——向量以一种受控、安全的方式完全完成你正在做的事情。数组就在那里,你只需要得到它。此时,您的代码存在内存泄漏,因为您没有调用
delete。
标签: c++ arrays class pointers struct