首页 > 解决方案 > 我可以创建一个只能动态分配的结构吗?

问题描述

在 C++ 中,我可以创建一个只能动态分配的结构吗?我想强制执行一种方法来确保程序员不能静态分配这个结构,因为这样做会导致悬空指针,因为我需要在其范围之外使用指针的内容。

标签: c++ooppointersstructdangling-pointer

解决方案


您可以创建struct一个私有构造函数,以便没有人可以从中创建,然后创建一个friend函数来创建一个动态分配的对象并返回一个指向它的指针,如下所示。

#include <iostream>
struct A{
    ~A() {
        std::cout << "\nA has been destructed";
    }
private:
    A(/*args*/) {
        std::cout << "\nA has been created";
    }
    friend A* creatA(/*args*/);

};
A* creatA(/*args*/){
    return new A(/*args*/);
}

int main()
{
    A* ptr = creatA();
    delete ptr;

}

使用智能指针和@PeterSuggestiion 会更好

#include <iostream>
#include <memory>

struct A{
    A(/*args*/) {
        std::cout << "\nA has been created";
    }
    friend std::default_delete<A>;
private:
    ~A() {
        std::cout << "\nA has been destructed";
    }
};

int main()
{
    std::unique_ptr<A> ptr = std::make_unique<A>(/*Args*/);

}

推荐阅读