小编kof*_*fes的帖子

从指向一个对齐结构的指针转换为另一个具有相同“前缀”成员的指针是否合法?

我试图创建一个智能指针,它只有一个指向内存块的指针,该指针以引用计数器(控制块)开头,并在其后立即存储一个值。在从论坛、标准和 cppreference 中阅读了一些内容后,我意识到代码看起来充满了 UB。

  1. 那么,这段代码相对于 C++17 标准是否合法?
#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)

c++ smart-pointers memory-alignment language-lawyer c++17

7
推荐指数
0
解决办法
197
查看次数