【发布时间】:2017-04-25 15:27:05
【问题描述】:
我有课
class Foo
{
public:
char* ptr;
Foo() { ptr=new char [10]; }
~Foo() { delete [] ptr; }
};
我了解到返回此类的对象是不可能的,因为动态分配的指针是 delete 'ed 并在调用函数中创建一个悬空指针
那么我怎样才能返回这个类的一个对象呢??
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)。
【问题讨论】:
-
链接显示你需要一个拷贝构造函数、赋值运算符和析构函数。
-
@WARhead,你看过第一个答案中的管理资源部分吗?
-
@WARhead 该链接有一个与您的代码几乎相同的示例,其中包含对情况和操作的完整说明。您没有阅读管理资源部分吗?
-
@WARhead -- 如果你知道三法则,为什么还要问它是否能解决问题?明确需要规则 3 来解决您的问题。
-
@WARhead -- 你在阅读我指出的链接吗?您将确切了解如何编写复制构造函数和赋值运算符。你在拖钓吗?
标签: c++ pointers return destructor dynamic-allocation