返回带有指针的 class 对象

returning a class object with a pointer

我有一个class

class Foo
{
    public:
    char* ptr;
    Foo()  { ptr=new char [10]; }
    ~Foo()  { delete [] ptr;  }
};

我了解到 return 不可能创建此 class 的对象,因为动态分配的指针是 delete 并在调用函数中创建了一个悬挂指针

那么我怎样才能 return 这个 class 的一个对象呢??

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
}

注意 这些只是我想要的实际 class 的表示,并不是根据推荐标准创建的(即请不要告诉我使用 std::stringstd::vector).

So how can I return An object of this class??

您需要实现正确管理内存的复制构造函数和复制赋值运算符。

// Copy constructor
Foo(Foo const& copy) : ptr(new char[strlen(copy.ptr)+1])
{
  strcpy(ptr, copy.ptr);
}

// Copy assignment operator
Foo& operator=(Foo const& rhs)
{
   // Don't do anything for self assignment
   if ( this != &rhs )
   {
      delete [] ptr;
      ptr = new char[strlen(rhs.ptr)+1]);
      strcpy(ptr, rhs.ptr);
   }
   return *this;
}

如果 ptr 总是一个 10 char 的数组,您将需要重新考虑复制构造函数和复制赋值。

// Copy constructor
Foo(Foo const& copy) : ptr(new char[10])
{
  memcpy(ptr, copy.ptr, 10);
}

// Copy assignment operator
Foo& operator=(Foo const& rhs)
{
   // Don't do anything for self assignment
   if ( this != &rhs )
   {
      memcpy(ptr, rhs.ptr, 10);
   }
   return *this;
}