C++ shared_ptr 无效

C++ shared_ptr void

我遇到了一个问题。我从自动化脚本创建了一个 C++ 代码片段。在那里,我创建了一个对象 say x,它的处理程序为 xx。大约有 2000 个处理程序。除此之外,有可能对象的名称是 x 而处理程序名称被错误地称为 x,而不是 xx。相反的情况并没有发生。由于处理程序属于 shared_ptr,因此可以接受它而不会出现任何编译器错误。我正在寻找的是确保编译器错误并避免 运行 时间错误。代码如下。

#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);
};