c++ - 我可以创建一个只能动态分配的结构吗?
问题描述
在 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;
}
使用智能指针和@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*/);
}
推荐阅读
- r - R:可以使用成像器加载多个图像以进行 lapply 操作吗?
- sql - 多个 CTE 查询,将单列值分配给局部变量
- neo4j - 使用 py2neo 进行图遍历
- python - Ubuntu 上的 Azure Cli 权限被拒绝错误
- typescript - TFJS 使用 Typescript 导入时抛出 TS2411 错误
- android - 将特定表解析为字符串数组 Jsoup
- java - 检查当前用户是否有权访问数据库
- java - 如何让 spring-boot @Async 与 Java 8 一起使用
- reactjs - 将相同的道具传递给多个样式组件
- scala - SBT 运行最近停止工作,Play 服务项目没有任何变化