gpt4 book ai didi

c++ - 将复制构造函数与 std::make_shared 结合使用

转载 作者:行者123 更新时间:2023-11-30 02:14:51 25 4
gpt4 key购买 nike

我定义了一个简单的类 Integer包含 int值,调用 std::make_shared<Integer>(&ref)将强制程序使用接受 int 的构造函数.我是否实现了错误的复制构造函数,或者我对 std::make_shared 的使用有问题? ?调用std::make_shared<Integer>(ref)有什么区别? ?另外,为什么不是 Integer copied_integer(integer);使用复制构造函数? Integer copied_integer(&integer);也是不允许的。

这是代码

#include <memory>
#include <iostream>
#include "DoubleLinkedList.h"

class Integer {
private:
int number;
public:
Integer(int number) : number(number) {}

Integer(const Integer &integer) : number(integer.number) {}

Integer& operator=(const Integer& other) {
if (this != &other) {
number = other.number;
}

return *this;
}

int get() { return number; }

};

int main() {


Integer integer(30);
const Integer &ref = integer;
Integer copied_integer(integer);
auto pointer = std::make_shared<Integer>(&ref);
auto sp = std::make_shared<Integer>(10);
std::cout << "sp -> " << sp->get() << std::endl;
std::cout << "pointer -> " << pointer->get() << std::endl;
return 0;
}

最佳答案

改变这个:

auto pointer = std::make_shared<Integer>(&ref);

为此:

auto pointer = std::make_shared<Integer>(ref);

因为您应该收到类似于以下的错误:

gcc-head/include/c++/10.0.0/ext/new_allocator.h:150:20: error: invalid conversion from 'const Integer*' to 'int' [-fpermissive]
150 | noexcept(noexcept(::new((void *)__p)
| ^~~~~~~~~~~~~~~~~~
| |
| const Integer*
151 | _Up(std::forward<_Args>(__args)...)))
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
prog.cc:8:17: note: initializing argument 1 of 'Integer::Integer(int)'
8 | Integer(int number) : number(number) {}
| ~~~~^~~~~~

通知/提醒您 refconst Integer* 类型,您只需要 const Integer&,它是该复制构造函数中的参数。

关于c++ - 将复制构造函数与 std::make_shared 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57100412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com