ge4*_*mue 5 c++ gcc c++11 c++17
我有以下示例(避免调用移动构造函数的扩展)
#include <cstdint>
class Interface
{
public:
Interface() = default;
virtual ~Interface() = default;
Interface(const Interface&) = delete;
Interface(Interface&&) = delete;
const Interface& operator=(const Interface&) = delete;
Interface& operator=(Interface&&) = delete;
};
class FooC : public Interface
{
public:
FooC(uint16_t iPort, uint16_t iPin)
: PORT(iPort)
, PIN(iPin)
{
};
FooC() = delete;
~FooC() override = default;
FooC(const FooC&) = delete;
FooC(FooC&&) = delete;
const FooC& operator=(const FooC&) = delete;
FooC& operator=(FooC&&) = delete;
private:
const uint16_t PORT;
const uint16_t PIN;
};
class FactoryC
{
public:
FactoryC()
: mFoo{
{1, 2},
{3, 4}
}
{
};
~FactoryC() = default;
FactoryC(const FactoryC&) = delete;
FactoryC(FactoryC&&) = delete;
const FactoryC& operator=(const FactoryC&) = delete;
FactoryC& operator=(FactoryC&&) = delete;
private:
FooC mFoo[2];
};
int main()
{
FactoryC factory{};
}
Run Code Online (Sandbox Code Playgroud)
我不想调用默认,移动和复制构造函数.由于我删除了功能.不幸的是,这会导致以下错误(使用C++ 17编译)
<source>: In constructor 'FactoryC::FactoryC()':
<source>:42:4: error: use of deleted function 'FooC::FooC(FooC&&)'
}
^
<source>:26:4: note: declared here
FooC(FooC&&) = delete;
^~~~
Compiler returned: 1
Run Code Online (Sandbox Code Playgroud)
是否有可能在此示例中强制使用参数调用构造函数并仍然删除FooC的默认,移动和复制构造函数?
| 归档时间: |
|
| 查看次数: |
205 次 |
| 最近记录: |