Mit gondoltok erről a C++-os RAII osztályról?
Vannak hiányosságai? Arra hivatott, hogy egy handle-t lezárjon. Chatgpt kódolta.










Kipróbálás, ZwFree() helyett free(), és malloc()
#include <iostream>
#include <stdlib.h>
typedef void *HANDLE;
class Handle {
private:
HANDLE handle;
public:
// Constructor: Initialize handle to nullptr
explicit Handle(HANDLE h = nullptr) : handle(h) {
std::cout << "()\n";
}
Handle(const Handle&) = delete;
Handle& operator=(const Handle&) = delete;
Handle(Handle&& other) noexcept : handle(other.handle) {
other.handle = nullptr; // Transfer ownership
std::cout << "(&&)\n";
}
Handle& operator=(Handle&& other) noexcept {
if (this != &other) {
Close(); // Close existing handle
handle = other.handle;
other.handle = nullptr;
}
std::cout << "=&&\n";
return *this;
}
~Handle() {
Close();
}
void Close() {
if (handle) {
free(handle);
handle = nullptr;
std::cout << "free()\n";
}
else std::cout << "free(0)\n";
}
HANDLE Get() const {
return handle;
}
HANDLE Release() {
HANDLE temp = handle;
handle = nullptr;
return temp;
}
void Reset(HANDLE h = nullptr) {
Close();
handle = h;
}
};
int main() {
{
Handle a(malloc(1000));
Handle b(std::move(a));
a = std::move(b);
}
std::cout << "Try program\n";
return 0;
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!