【发布时间】:2016-09-13 09:39:40
【问题描述】:
如何在类中动态分配内存?
为了澄清我的问题,我做了一个例子。我会构造一个 A 的实例 a 并将其复制到 b 中。使用后,a 和 b 将被破坏,分配的内存将在析构函数中释放两次。
那么我该如何处理这种情况呢?
#include <stdlib.h>
class A {
public:
char * allocatedMemory;
A(int length) {
allocatedMemory = (char *) malloc(sizeof(char) * length);
}
~A(){
free(allocatedMemory);
}
};
int main() {
A a = A(50);
A b = a;
return 0;
}
PS:要了解上下文:我试图通过示例弄清楚 std::string 如何分配和释放内存。当然只有基本配置。
【问题讨论】:
-
搜索“三的规则”(以及“五”和“零”)。
-
你考虑过重载赋值运算符吗?
-
嗨,您面临的问题是由于浅拷贝。如果您不显式提供复制构造函数,则编译器将提供默认复制构造函数以使用现有对象初始化一个对象。默认复制构造函数执行按位复制。 IE。只需将存储在一个对象指针中的地址复制到另一个对象。为了避免这种双重释放问题,你需要做深拷贝。编写您自己的复制构造函数,在该复制构造函数中使用 new 为您的字符指针显式分配内存,然后使用 memcpy() 复制实际内容。希望这会有所帮助。
-
谢谢大家。我只需要复制构造函数!
-
为什么不直接使用已经有你想要的语义的东西,比如
std::vector<char>?
标签: c++ memory memory-management dynamic-memory-allocation