Ano*_*ous -1 c++ oop struct pointers dangling-pointer
在 C++ 中,我可以创建一个只能动态分配的结构吗?我想强制执行一种方法来确保程序员不能静态分配这个结构,因为这样做会导致悬空指针,因为我需要在其范围之外使用指针的内容。
您可以创建一个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;
}
Run Code Online (Sandbox Code Playgroud)
使用智能指针和@Peter 建议会更好
#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*/);
}
Run Code Online (Sandbox Code Playgroud)