我试图创建一个智能指针,它只有一个指向内存块的指针,该指针以引用计数器(控制块)开头,并在其后立即存储一个值。在从论坛、标准和 cppreference 中阅读了一些内容后,我意识到代码看起来充满了 UB。
#include <iostream>
#include <memory>
#include <type_traits>
#include <new>
struct alignas(alignof(size_t)) StorageBase {
size_t m_rc = 0;
};
template<typename T>
struct Storage: public StorageBase {
using value_type = T;
std::aligned_storage_t<sizeof(value_type), alignof(value_type)> m_value_storage;
};
class Dummy {
public:
Dummy() { std:: cout << "Dummy constructed" << std::endl; }
virtual ~Dummy() { std:: cout << "Dummy destructed" << std::endl; }
};
class DerivedDummy: public Dummy {
public:
DerivedDummy() { std:: cout << "DerivedDummy constructed" << std::endl; …Run Code Online (Sandbox Code Playgroud)