gpt4 book ai didi

c++ - 工厂只需要声明 copy ctor 而无需实现

转载 作者:行者123 更新时间:2023-11-30 03:33:58 25 4
gpt4 key购买 nike

我在派生类的复制构造函数中遇到了我不理解的行为。

class A {
A(const A&);

public:
A() = default;
};

class B : public A {
friend class Factory;
B(const int v) : A(), m_test_val(v) {}

public:
int m_test_val;
B(const B&); // no implementation, just declaration
};

class Factory {
public:
static B create(const int v) {
return B(v);
}
};

int main() {
B b = Factory::create(2);
std::cout << b.m_test_val << '\n';
return 0;
}

我不明白的行为是工作复制构造函数 B::B(const B&); 的问题,但是,它没有任何实现。

当我改用 B::B(const B&) = default; 时,我收到一条错误消息,提示我在 return 语句中使用了已删除的函数(由于格式错误而隐式删除) Factory::create() 函数(A::A(const A&) 是私有(private)的,没有故意实现)。

当然,当我使用 B::B(const B&) = delete; 时,编译器告诉我我使用了 deleted 函数。

复制构造函数怎么可能在没有实现的情况下仅通过声明工作?

注意:示例代码基于行为相同的更大代码,希望我没有遗漏任何内容。

最佳答案

编译器忽略了实际的拷贝,这是允许的,因为复制构造函数是可访问的。编译器当然没有义务删除此拷贝,如果没有删除,我预计会出现链接器错误,找不到复制构造函数的实现。

关于c++ - 工厂只需要声明 copy ctor 而无需实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42397983/

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