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);
};
我遇到了一个问题。我从自动化脚本创建了一个 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);
};