结构体可以编写析构函数吗?怎么写?

来源:百度知道 编辑:UC知道 时间:2024/05/24 20:42:39
接口体可以拥有自己的函数吗?比如构造和析构函数。如果有,怎么写啊?举个例子!如果不能的话,有些含指针的结构体怎么进行释放?
我怎么看它是不是堆栈空间中的啊?

可以,C++中的struct作为类使用的时候只有默认访问级别这一点不同,struct默认是public,class默认是private:

struct cat
{
cat(const char* name)
{
cat_name = new char[strlen(name) + 1];
strcpy(cat_name, name);
}

~cat(){delete [] cat_name;}
private:
char* cat_name;
};

如果要在类里处理一些资源的话推荐用shared_ptr或shared_array:

#include <boost/smart_ptr.hpp>
#include <iostream>
using std::cout;

struct cat
{
cat(const char* name) : cat_name(new char[strlen(name) + 1])
{
strcpy(cat_name.get(), name);
}

void act(){cout << cat_name.get() << " is wallowing on the floor.\n";}

private:
boost::shared_array<char> cat_name;
};

int main()
{
cat aCat("kitty");
aCat.act();
}

没有。

关于指针释放问题,要看指针中存贮的是什么。如果是普通变量的地址,就没有必要释放。如果是堆栈空间,可以用内存释放函数释放指针指向的这部分空间。

当然可以,结构体和类的唯一区别就是其成员变量默认为公有,