首页 > 解决方案 > 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);

说第二个论点是错误的?

标签: c++shared-ptr

解决方案


您可能会delete出现不必要的过载

struct packet
{
    A_SharedPtr mem_1;
    A_Handler   mem_2;
    packet(A_SharedPtr, A_SharedPtr) = delete;
    packet(A_SharedPtr a1, A_Handler a2);
};

推荐阅读