2014-02-04 5 views
0

ли класс ниже потребность деструктор ~ MyString() {удалить PTR}деструктор в конкретном случае

class MyString 
{ 
    char* ptr; 
    int size; 
public: 
    ~MyString() { delete ptr}; 
    MyString(char* str) : ptr(str),size(strlen(ptr)){}; 
}; 

если я инициализировать его таким образом

int main() 
{ 
MyString s1("ddddd"); // no new --> no delete ? 
} 

?

ответ

1

Нет! Здесь нет delete. Никогда, потому что конструктор получил указатель от кого-то другого. Тот, кто прошел указатель, должен позаботиться о том, что с ним происходит в отношении очистки. Я считаю, что ваш класс даже разбит. Я не уверен (поскольку я не эксперт на C++), но вам придется взять копию char*.

И FYI: вы знаете, std::string существует?

1

Если вы используете C++ 11, этот общий указатель позаботится об удалении указателя. smart_pointer и auto_pointer могут быть параметрами, если вы работаете с предыдущими версиями C++.

#include <memory> 

class MyString 
{ 
    shared_ptr<char> ptr; 
    int size; 
public: 
~MyString() {}; 
MyString(shared_ptr<char> str) : ptr(str),size(strlen(ptr.get())){}; 
}; 
Смежные вопросы