c++ - c++类动态分配自身实例
问题描述
所以我试图弄清楚如何创建一个可以动态分配和销毁自身的适当的 C++ 类。我想出了以下
class tClass {
public:
tClass() {
c = 0;
extra = new int[1024 * 1024]; // To see memory usage
while (true) {
if (c != 1) {
std::cout << "Name the class: ";
std::cin >> str;
}
std::cout << "1 = create a new instance, 2 = delete this instance\n";
std::cin >> c;
if (c == 1) {
tclass = new tClass();
}
else {
break;
}
}
delete[] extra;
this->~tClass();
}
~tClass() {
std::cout << "tClass " << str << " destroyed\n" << std::endl;
}
private:
std::string str;
tClass* tclass;
int c;
int* extra;
};
int main () {
tClass *tclass = new tClass();
delete tclass;
return 0;
}
它有效,但我确信它不会以健康的方式运作。它真的释放了它使用的所有内存吗?将“delete[] extra”放入析构函数最终会给我内存访问冲突错误。
解决方案
我自己想通了。感谢mr5给我提示。
class Slave {
public:
Slave(const std::string& str): _str(str) {
std::cout << "Slave " << _str << " was created\n";
}
~Slave() {
std::cout << "Slave " << _str << " was destroyed\n";
}
private:
std::string _str;
};
class Master {
public:
Master() {
while (true) {
std::cout << "1 = create new, 2 = delete latest\n";
std::cin >> c;
if (c == 1)
Create();
else
if (!Destroy())
break;
}
}
~Master() {}
void Create() {
std::cout << "Name the new class: ";
std::cin >> str;
slaves.push_back(new Slave(str));
}
bool Destroy() {
if (slaves.size() > 0) {
delete slaves[slaves.size() - 1];
slaves.pop_back();
return true;
} else
return false;
}
private:
std::string str;
std::vector<Slave*> slaves;
int c;
};
int main()
{
Master* master = new Master();
delete master;
return 0;
}
推荐阅读
- python - Tatsu 语法分析器和代码生成器产生两个截然不同的结果
- arduino - 在 Arduino 上运行多个草图
- git - 预提交工作正常,但 git 提交失败
- python - 在 TensorFlow 2.3 中规范化 BatchDataset
- spring-boot - 使用 SpringBootTest webEnvironment MOCK 和 DEFINED_PORT 进行测试时出现意外的应用程序上下文缓存命中
- python - 修改函数以接受表格(Python 3)
- amazon-web-services - 当我将实例类型从 t2 micro 更改为 t3a.xlarge 时会发生什么?
- actionscript-3 - 如何在一个数组中命中测试相同的对象?
- java - Spring MVC 组件扫描不拾取控制器
- java - Int++ 运算符在第一次运行时没有增加 int