我在调用我设置的复制构造函数时遇到了一些困难。
Image::Image(const Image& img) /* Copy constructor */
{
this->x = img.x;
this->y = img.y;
this->data = img.data;
}
我试图用Image input = *new Image(GetInput());
来调用它。 GetInput()
会返回Image*
。有没有办法让参数匹配?
答案 0 :(得分:3)
这样做:
Image input = *new Image(GetInput());
导致即时内存泄漏,因为分配的内存无处存储。
如果GetInput()
每次都没有分配返回的Image
,您可以这样做:
Image input = *GetInput();
否则你最好选择一些智能指针:
std::unique_ptr<Image> input { GetInput() }; // C++11
auto input = std::make_unique<Image>(GetInput()); // C++1y / C++14
一个更好的解决方案是完全避免使用任何指针,但我想这超出了实际问题的范围......
此外,如果Image::data
是一个动态分配的变量,如果您只是像在代码段中那样复制指针,那么您将遇到很多麻烦。
答案 1 :(得分:0)
*new Image(....)
是一个坏主意,因为new
分配的内存会立即泄露。你永远不会delete
那个指针。
你可以写:
Image *p = GetInput();
Image input(*p);
您必须检查GetInput()函数以确定返回的指针是否需要删除;如果是这样,那么请跟进:
delete p;
注意:确保Image
具有正确的复制构造函数(也请检查“三规则”)。
答案 2 :(得分:0)
如果我理解正确,您希望将GetInput
的结果复制到新变量中。你可以用
Image input(*GetInput());
然而,GetInput
返回的值会发生什么变化?该函数的文档应告诉您谁拥有该对象以及删除它的责任。
如果调用者(你是)拥有该对象,那么只需复制指针而不是创建新对象就可能更好:
Image *input = GetInput();