问题很简单。我有一个可以结构如下的类:
class MyClass {
struct A {
// ...
};
struct B {
// ...
};
};
Run Code Online (Sandbox Code Playgroud)
问题是:MyClass::B经过一段时间的预计算后,里面的信息是没有用的,而MyClass::A绝不能删除(程序可能运行了好几天)。MyClass::B掌握着相当大量的信息。我想摆脱,MyClass::B同时保持MyClass::A在相同的记忆位置。
是否可以在不修改太多数据结构并且不必添加任何其他内容MyClass::A(特别是指向 的指针MyClass::B)的情况下执行此操作?如果是这样,实施它的正确方法是什么?考虑到程序必须尽可能节省内存(让我们把它发挥到极致)。我使用 C++14 顺便说一句。
(还有额外的问题:是否可以删除对应于MyClass::Bfrom的块MyClass?)
首先或全部是类声明。您不能删除类声明的一部分。你可能有更多这样的事情:
// The exact place of the declaration doesn't matter actually
class A {...};
class B {...};
class C {
A a;
B b;
};
Run Code Online (Sandbox Code Playgroud)
只需将其更改为使用指针(在当今时代是智能指针,例如std::unique_ptr):
class C {
A a;
std::unique_ptr<B> b;
void FinishTaskThatRequiredB() {
b.reset(); // calls B::~B() and frees the memory.
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |