Ger*_*mán 3 c++ memory-management
我有这个:
enum Units { Pounds, Kilos };
struct Configuration
{
const Units units;
const char *name;
inline Configuration(Units pUnits, char *pName) : units(pUnits)
{
name = strdup(pName);
}
inline ~Configuration() { free((void *)name); }
};
Run Code Online (Sandbox Code Playgroud)
我正在将其中一个传递给这样的方法:
Configuration cc(Kilos, "abc");
cdao->write(cc);
Run Code Online (Sandbox Code Playgroud)
我从这里得到了令人讨厌的崩溃,直到我尝试重新定义方法来引用:
Configuration cc(Kilos, "abc");
cdao->write(&cc);
Run Code Online (Sandbox Code Playgroud)
现在一切正常.
但是,价值结构怎么可能与内存紧密相连?
小智 6
您使用strdup的事实表明您的代码有问题,而错误的是您没有复制构造函数.每当你有一个析构函数时,你几乎肯定还需要一个复制构造函数,它会在你按值调用时正确复制对象.
要改进您的代码:
创建一个复制构造函数,可能是一个赋值操作符,它正确地分配和复制字符串
更好的是,摆脱strdup - 使用std:;字符串,在这种情况下你不需要析构函数,复制ctor或赋值操作.
摆脱"内联"关键字 - 他们什么都不做.
| 归档时间: |
|
| 查看次数: |
3104 次 |
| 最近记录: |