c++ - C++ shared_ptr 无效
问题描述
我面临一个问题。我从一个自动化脚本创建了一个 c++ 代码片段。在那,我创建了一个对象说x,它的处理程序是xx。大约有 2000 个处理程序。其中有可能对象的名称是 x 并且处理程序名称错误地是 x,而不是 xx。相反的事情没有发生。由于处理程序是 shared_ptr<void> 的,因此它接受它而没有任何编译器错误。我正在寻找的是确保编译器错误并避免运行时错误。代码如下。
#include <memory>
#include <iostream>
#include <string>
using namespace std;
class A
{
public:
void foo()
{
std::cout << "Foo";
}
};
typedef shared_ptr<A> A_SharedPtr;
typedef shared_ptr<void> A_Handler;
struct packet
{
A_SharedPtr mem_1;
A_Handler mem_2;
packet(A_SharedPtr a1, A_Handler a2)
{
mem_1 = a1;
mem_2 = a2;
}
};
int main() {
A_SharedPtr x;
A_Handler xx;
packet p1(x, x); //POTENTIAL ERROR WHICH LEADS TO RUNTIME EXCEPTION
packet p2(x, xx);//CORRECT ONE
}
您能否建议,程序员在尝试时会遇到编译错误
packet p1(x, x);
说第二个论点是错误的?
解决方案
您可能会delete
出现不必要的过载
struct packet
{
A_SharedPtr mem_1;
A_Handler mem_2;
packet(A_SharedPtr, A_SharedPtr) = delete;
packet(A_SharedPtr a1, A_Handler a2);
};
推荐阅读
- javascript - 如何在amcharts中设置我的饼图容器的高度?
- android-recyclerview - android中recyclerView的控制流程
- spring - 无法建立 Hibernate SessionFactory;嵌套异常
- reinforcement-learning - openai-gym pong:我怎样才能让 reset() 更随机
- git - 将下载的 repo 的提交添加到原始提交历史并允许拉取请求
- powershell - 重命名文件夹时,power shell 提示找不到文件错误
- python - Python:返回时解包的值太多
- asp.net - 使用数据库中的下拉列表更新 Asp.net gridview
- python - Python WTF 表单,导入错误,没有名为 flask_wtf 的模块
- bluetooth-lowenergy - 为什么扩展广告 PDU(ADV_EXT_IND)在 BLE 规范中不能既可扫描又可连接?