c++ - 没有已知的参数 1 从 ‘Image*’ 到 ‘const Image&’ 的转换

标签 c++ copy-constructor

我在调用我设置的复制构造函数时遇到一些困难。

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*。有什么方法可以使参数匹配吗?

最佳答案

这样做:

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 是一个动态分配的变量,如果您像在代码片段中那样简单地复制指针,将会遇到很多麻烦。

关于c++ - 没有已知的参数 1 从 ‘Image*’ 到 ‘const Image&’ 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23900672/

相关文章:

c++ - 'std:;' 在 C++ 中会做什么?

c++ - 带有受歧视 union 和可选<>的奇怪段错误

c++ - 在 C++ 中永远不会调用重载运算符

java - 我不了解复制构造函数的详细工作方式

java - 如何在不影响副本的情况下复制 Java 对象

C++/COM/代理 Dll : method override/method forwarding (COM implementation inheritance)

c++ - 这是一个引用到非常量绑定(bind)到临时的实例吗?

c++ - 尽管在 bash 中通过管道重定向,仍写入终端

c++ - 为 ISO 8859-1 实现 basic_string<unsigned char>

C++ 复制构造函数调用