gpt4 book ai didi

c++ - 适当的析构函数中应该包含什么?

转载 作者:太空狗 更新时间:2023-10-29 23:53:18 26 4
gpt4 key购买 nike

我知道析构函数本质上是一个函数,它会在您使用完内存时释放内存或进行“清理”。

我的问题是,适当的析构函数中包含什么?

让我向您展示一些我拥有的类(class)的代码:

#ifndef TRUCK_H__
#define TRUCK_H__

#include <iostream>
#include "printer.h"
#include "nameserver.h"
#include "bottlingplant.h"

using namespace std;

class BottlingPlant; // forward declaration

class Truck {

public:
Truck( Printer &prt,
NameServer &nameServer,
BottlingPlant &plant,
unsigned int numVendingMachines,
unsigned int maxStockPerFlavour );
~Truck();
void action();

private:
Printer* printer; // stores printer
NameServer* ns; // stores nameserver
BottlingPlant* bottlingPlant; // stores bottlingplant
unsigned int numVM; // stores number of vendingmachine
unsigned int maxStock; // stores maxStock
unsigned int cargo[4]; // stores the cargo.

};

这是构造函数:

Truck::Truck( Printer &prt, 
NameServer &nameServer,
BottlingPlant &plant,
unsigned int numVendingMachines,
unsigned int maxStockPerFlavour ) {
printer = &prt;
printer->print( Printer::Truck, 'S' );
ns = &nameServer;
bottlingPlant = &plant;
numVM = numVendingMachines;
maxStock = maxStockPerFlavour;
cargo[ 0 ] = 0;
cargo[ 1 ] = 0;
cargo[ 2 ] = 0;
cargo[ 3 ] = 0;
}//constructor

在我的析构函数类中,我应该在指针之后进行清理吗?那是,将它们设置为 NULL?还是删除它们?

Truck::~Truck()
{
printer = NULL; // or should this be delete printer?
ns = NULL;
bottlingPlant = NULL;
// anything else? or is it fine to leave the pointers the way they are?
}//destructor

感谢您的帮助,只是想养成创建适当析构函数的好习惯。

最佳答案

当您在对象中存储指针时,您需要清楚地了解谁拥有它们所指向的内存。如果您的类是所有者,那么析构函数必须释放内存,否则就会发生泄漏。如果您的类(class)不是所有者,则不得释放内存。

将指针设置为NULL是不必要的,重要的是妥善处理内存本身。

管理指针的一种更简单的方法是使用智能指针类,它将自动为您处理。

关于c++ - 适当的析构函数中应该包含什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11661005/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com