【发布时间】:2019-06-10 20:14:54
【问题描述】:
我发现自己如此频繁地不假思索地编写了添加指向对象的指针的类,这些对象后来被销毁到列表中,这导致了很多段错误,但问题是有时我只是可以't 想出比存储指针列表更好的解决方案。我的想法是,似乎没有一种简单的方法可以在 C++ 中“存储无法复制的临时对象”。关于如何有效地做到这一点,我是否缺少一个范例?
例如,我将有一个看起来像这样的类:
class MyClass
public:
std::vector<OtherClass *> other_objects;
void method() {
OtherObject other_object = create_other_object();
other_objects.push_back(&other_object);
}
您可能想要这样做的一个原因是因为您在其他地方使用了 other_objects(作为其他函数的参数)并且您无法复制 OtherObject 实例(如果 OtherObject 复制构造函数是私有的,则可能发生这种情况例如)。
当然,一旦你尝试在代码的其他地方使用other_objects,每个指针指向的内存都将被销毁。
我编写了很多 Python 代码,并且我经常非常使用这种结构,其中方法使用仅存在于方法范围内的对象填充可迭代对象。有没有办法在 C++ 中有效地做到这一点?我可以自己进行内存管理以使方法中的临时对象在方法范围之外保持活动状态吗?
【问题讨论】:
-
最好不要使用原始指针,而是使用smart pointers。
-
我不熟悉这个概念,我只是C++的初学者。您能否分享一些参考资料或详细说明它如何解决我的问题?
-
正如我所写,学习这些高级主题至少需要一年时间。看你的 C++ 书,一年的学习不能真正简化为对 stackoverflow 的简短回答。 C++ 很难。
-
@texasbruce:我认为掌握 C++ 需要十年时间。一年肯定不够。并且很少有人掌握 C++(我不声称,即使我知道其中一些)。
标签: c++ memory-management