c++ - 如何确定对象指针指向的类型?

标签 c++ pointers smart-pointers

我正在玩我的智能指针类,我想实现具有以下行为的++ 和 -- 运算符:如果指针指向单个变量或者它指向数组并且++(--) 将指针移出数组尝试++(--) 时应抛出异常。

类似的东西:

class A;

SmartPtr<A> s(new A[3]);
SmartPtr<A> s1(new A());
++s;//ok
--s;//ok
--s;//exception OutOfBounds thrown
++s1;//exception OutOfBounds thrown
--s1;//exception OutOfBounds thrown

我尝试使用 typeid。但无论如何它都会返回 A 类型。

A* arr=new A[3];
typeid(arr).name();//type is P1A
typeid(--arr).name();//type is P1A
typeid(arr+7).name();//type is P1A

那么有什么方法可以确定指针在++(--) 之后是否指向“我的”类型的对象?

最佳答案

new A[3] 返回一个 A*,就像 new A 一样。所以你无法区分它们。

如果您希望您的类进行边界检查,那么您需要明确地告诉它数组中有多少项。

关于c++ - 如何确定对象指针指向的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9053919/

相关文章:

c++ - Boost线程开销

c - 向函数传递指针的问题

c++ - 这段代码理论上都会有double free,但是为什么没有重复

c - 指针数组中的增量运算符有什么问题?

c - 为什么 realloc 在此 while 循环中不起作用?

java - C++:普遍使用 shared_ptr<> 是否等同于 gc?

rust - 为什么生成器函数需要 sized trait 来生成 Rc<T>?

c++ - 在 .cpp 文件之间传递全局字符串变量?

c# - C++ .NET DLL 与 C# 托管代码? (文件加密 AES-128+XTS)

c++ - 在 opencv 中组合 Scharr 导数