注意积木工厂系统delete部分
class BlockFactorySystem {
private:
std::vector<Block*> blocks;
public:
void produceBlocks(BlockFactory* factory, int quantity) {
for (int i = 0; i < quantity; i++) {
Block* block = factory->createBlock();
blocks.push_back(block);
block->produce();
}
}
const std::vector<Block*>& getBlocks() const {
return blocks;
}
~BlockFactorySystem() {
// 释放所有动态分配的积木对象
for (Block* block : blocks) {
delete block;
}
}
};
我们发现积木工厂系统只对block进行了delete
接下来看main代码的new部分
int main() {
..
if (blockType == "Circle") {
factorySystem.produceBlocks(**new CircleBlockFactory()**, quantity);
} else if (blockType == "Square") {
factorySystem.produceBlocks(new SquareBlockFactory(), quantity);
}
}
...
}
发现main代码给factory分配了内存,但并没有对factory进行delete,导致了内存泄漏。
注意积木工厂系统delete部分
我们发现积木工厂系统只对block进行了delete
接下来看main代码的new部分
发现main代码给factory分配了内存,但并没有对factory进行delete,导致了内存泄漏。