我收到一个字符地址,我想让字符指针保存字符数组中的值
void assign(char set[]) {
m_ptr = new char[strlen(set) + 1];
strcpy(m_ptr, set);
// OR
m_ptr = set;
两种方式都可以吗?我也想避免内存泄漏,但我确实有一个析构函数,所以我认为我很好。
~Title() {
delete[] m_ptr;
}
初版
void assign(char set[]) {
m_ptr = new char[strlen(set) + 1];
strcpy(m_ptr, set);
这段代码创建了一个新的字符数组,并将旧数组中的字符复制到新数组中。所以你最终得到两个字符数组和两个指针,每个指向一个字符数组。然而,两个数组的内容是相同的。
第二版
void assign(char set[]) {
m_ptr = set;
这次没有创建新的字符数组,而是复制指针,所以只有一个字符数组,两个指针都指向它。
这是非常不同的结果,这真的取决于你决定哪种最适合你。然而,通常首选第一种方法。第二种方法的问题是,你最终会得到两个指向相同数据的点。在这种情况下,对数组的任何更改都将被两个指针看到,这可能会造成混淆。此外,如果数组需要删除,则不清楚是谁的责任,因为两个指针都可以用来删除数组。
所以我会使用第一个版本,除非你觉得你有充分的理由不使用。