union中的指针

hxxwcc 2008-08-22 09:04:46
象这样一个union:

union{
int* first;
char* second;
}

我如果在程序里用new对first或second进行了内存分配,那么如何安全delete?

我想到了两个方法:一是不用某个指针时就直接delete,二是用auto_ptr.有更好的方法吗?
...全文
262 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
waji2000 2008-08-24
  • 打赏
  • 举报
回复
union{
int* first;
char* second;
} unionTest;

std::auto_ptr<int> pint(unionTest.first);
or
std::auto_ptr<char> pchar(unionTest.second);

两者只能用其中一个,
或使用偏特化

没有测试过.
hxxwcc 2008-08-22
  • 打赏
  • 举报
回复
经过试验,发现好像还是直接delete更为直观和便捷。

boost::variant<boost::scoped_ptr<int>, boost::scoped_ptr<double> > j;
boost::get< boost::scoped_ptr<int> >(j).reset(new int(1) );
cout<<j<<endl;

这样去使用的话是可以的,不过复杂性大为上升。
std::auto_ptr不能使用,很郁闷;相反,boost库中的几个指针道是支持的不错。
但是当使用后一个成员时(boost::scoped_ptr<double>)程序却会terminate掉
bitxinhai 2008-08-22
  • 打赏
  • 举报
回复
用auto_ptr是比较好的方法!!
系统自动释放!!!
freshui 2008-08-22
  • 打赏
  • 举报
回复
直接delete就行了,
只是你不能同时给first和second分配内存, 他们实际上是一个变量, 不同的叫法罢了
hxxwcc 2008-08-22
  • 打赏
  • 举报
回复
刚4了一下,union中不允许有auto_ptr

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧