У меня есть классвозвращает объект класса с указателем
class Foo
{
public:
char* ptr;
Foo() { ptr=new char [10]; }
~Foo() { delete [] ptr; }
};
Я узнал, что возвращающий объект этого класса не представляется возможное, как динамически распределяемой указатель delete
«редактора и создает оборванный указатель в вызывающая функция
Так как я могу вернуть объект этого класса ??
Foo Bar()
{
Foo obj;
return obj;
}
Может ли быть решен путем добавления конструктора копирования
Foo::Foo(const Foo& obj)
{
ptr = new char [10];
for(int i = 0 ; i < 10 ;++i)
ptr [i] = obj.ptr[i];
}
и функции, как
Foo Bar()
{
Foo obj;
return Foo(obj); //invokes copy constructor
}
Примечания Это просто представление фактического класса я хочу и не созданный в соответствии с рекомендованными стандартами (т. е. пожалуйста, не говорите мне использовать std::string
или std::vector
).
@PaulMcKenzie Это не объясняет, что делать, чтобы преодолеть это. – WARhead
Ссылка показывает, что вам нужен конструктор копирования, оператор присваивания и деструктор. – PaulMcKenzie
@WARhead, вы посмотрели раздел ** Управление ресурсами ** в первом ответе? –