kernel/physical_core: Make use of std::unique_ptr
shared_ptr was used in 2d1984c20c
due to a
misunderstanding of how the language generates move constructors and
move assignment operators.
If a destructor is user-provided, then the compiler won't generate the
move constructor and move assignment operators by default--they must be
explicitly opted into.
The reason for the compilation errors is due to the fact that the
language will fall back to attempting to use the copy constructor/copy
assignment operators if the respective move constructor or move
assignment operator is unavailable.
Given that we explicitly opt into them now, the the move constructor and
move assignment operators will be generated as expected.
This commit is contained in:
parent
16e7b7b83d
commit
2de2bb980e
2 changed files with 10 additions and 4 deletions
|
@ -20,13 +20,13 @@ PhysicalCore::PhysicalCore(Core::System& system, std::size_t id,
|
||||||
Core::ExclusiveMonitor& exclusive_monitor)
|
Core::ExclusiveMonitor& exclusive_monitor)
|
||||||
: core_index{id} {
|
: core_index{id} {
|
||||||
#ifdef ARCHITECTURE_x86_64
|
#ifdef ARCHITECTURE_x86_64
|
||||||
arm_interface = std::make_shared<Core::ARM_Dynarmic>(system, exclusive_monitor, core_index);
|
arm_interface = std::make_unique<Core::ARM_Dynarmic>(system, exclusive_monitor, core_index);
|
||||||
#else
|
#else
|
||||||
arm_interface = std::make_shared<Core::ARM_Unicorn>(system);
|
arm_interface = std::make_shared<Core::ARM_Unicorn>(system);
|
||||||
LOG_WARNING(Core, "CPU JIT requested, but Dynarmic not available");
|
LOG_WARNING(Core, "CPU JIT requested, but Dynarmic not available");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
scheduler = std::make_shared<Kernel::Scheduler>(system, *arm_interface, core_index);
|
scheduler = std::make_unique<Kernel::Scheduler>(system, *arm_interface, core_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
PhysicalCore::~PhysicalCore() = default;
|
PhysicalCore::~PhysicalCore() = default;
|
||||||
|
|
|
@ -24,6 +24,12 @@ public:
|
||||||
PhysicalCore(Core::System& system, std::size_t id, Core::ExclusiveMonitor& exclusive_monitor);
|
PhysicalCore(Core::System& system, std::size_t id, Core::ExclusiveMonitor& exclusive_monitor);
|
||||||
~PhysicalCore();
|
~PhysicalCore();
|
||||||
|
|
||||||
|
PhysicalCore(const PhysicalCore&) = delete;
|
||||||
|
PhysicalCore& operator=(const PhysicalCore&) = delete;
|
||||||
|
|
||||||
|
PhysicalCore(PhysicalCore&&) = default;
|
||||||
|
PhysicalCore& operator=(PhysicalCore&&) = default;
|
||||||
|
|
||||||
/// Execute current jit state
|
/// Execute current jit state
|
||||||
void Run();
|
void Run();
|
||||||
/// Execute a single instruction in current jit.
|
/// Execute a single instruction in current jit.
|
||||||
|
@ -64,8 +70,8 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::size_t core_index;
|
std::size_t core_index;
|
||||||
std::shared_ptr<Core::ARM_Interface> arm_interface;
|
std::unique_ptr<Core::ARM_Interface> arm_interface;
|
||||||
std::shared_ptr<Kernel::Scheduler> scheduler;
|
std::unique_ptr<Kernel::Scheduler> scheduler;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Kernel
|
} // namespace Kernel
|
||||||
|
|
Loading…
Reference in a new issue