不知道是从哪个版本的SDK开始,微软引入了一个新的类型——INT_PTR(其实也就是 typedef了一把)。看下面的定义就知道了。
- #if defined(_WIN64)
-
typedef __int64 INT_PTR, *PINT_PTR;
-
typedef unsigned __int64 UINT_PTR, *PUINT_PTR;
-
-
typedef __int64 LONG_PTR, *PLONG_PTR;
-
typedef unsigned __int64 ULONG_PTR, *PULONG_PTR;
-
-
#define __int3264 __int64
-
-
#else
-
typedef _W64 int INT_PTR, *PINT_PTR;
-
typedef _W64 unsigned int UINT_PTR, *PUINT_PTR;
-
-
typedef _W64 long LONG_PTR, *PLONG_PTR;
-
typedef _W64 unsigned long ULONG_PTR, *PULONG_PTR;
-
-
#define __int3264 __int32
-
-
#endif
-
#endif // midl64
#if defined(_WIN64)
typedef __int64 INT_PTR, *PINT_PTR;
typedef unsigned __int64 UINT_PTR, *PUINT_PTR;
typedef __int64 LONG_PTR, *PLONG_PTR;
typedef unsigned __int64 ULONG_PTR, *PULONG_PTR;
#define __int3264 __int64
#else
typedef _W64 int INT_PTR, *PINT_PTR;
typedef _W64 unsigned int UINT_PTR, *PUINT_PTR;
typedef _W64 long LONG_PTR, *PLONG_PTR;
typedef _W64 unsigned long ULONG_PTR, *PULONG_PTR;
#define __int3264 __int32
#endif
#endif // midl64
众所周知,在32位操作系统里,一个int是4个字节。64位操作系统上,一个int是8个字节。指针的大小也是同样。所以用INT_PTR代替int理论上可以让代码具有更好的移植性,当然也让代码看起来更专业:)
分享到:
相关推荐
std::shared_ptr<int> ptr2 = std::make_shared<int>(5); // 使用make_shared ``` 2. 共享:多个`std::shared_ptr`可以共享同一对象,它们都拥有对对象的所有权。 ```cpp std::shared_ptr<int> ptr3(ptr); // 复制...
### Auto_ptr 智能指针介绍 在C++中,`auto_ptr`是一种智能指针,它通过在对象的生命周期内自动管理所指向的对象内存,来帮助开发者避免内存泄漏和其他资源管理问题。`auto_ptr`是C++标准库的一部分,并在C++11之前...
void process(shared_ptr<int> ptr) { cout << "in process use_count:" << ptr.use_count() ; } ``` 调用`reset`方法可以改变`shared_ptr`所指向的对象,旧对象的引用计数会减1,如果减至0则会被释放: ```cpp ...
std::unique_ptr<int> p4(new int); std::unique_ptr<int> p5(p4); // 错误,不能拷贝 std::unique_ptr<int> p5(std::move(p4)); // 正确,通过移动构造函数转移所有权 ``` 2. **自动释放**:`unique_ptr`在...
通常是一个原子整数(如`std::atomic<int>`),确保在多线程环境下的安全性。 2. **删除器(Deleter)**:`unique_ptr`和`shared_ptr`都需要知道如何删除它们所拥有的对象。`unique_ptr`的删除器通常在构造函数中...
boost::shared_ptr<int> pi(px); *pi = 6; system("pause"); return 0; } ``` 在这个例子中,首先使用`new`操作符动态分配了一个`int`类型的对象,并将其值初始化为3。然后创建了一个`boost::shared_ptr`对象`...
unique_ptr<int> pInt(new int(5)); ``` 这将创建一个unique_ptr实例,它管理着一个整型对象,初始值为5。 2. 禁止复制与赋值 unique_ptr不支持复制构造函数和赋值操作,这是为了保证对象的所有权是唯一的。试图...
通过本篇文章的介绍,我们深入了解了 C++ 中 `auto_ptr` 的基本概念和实现细节。虽然 `auto_ptr` 已经逐渐被更现代的智能指针类型所取代,但它依然是学习智能指针基础的重要起点。希望读者能够在实践中合理选择并...
int main(){ std::shared_ptr<Test> p = std::make_shared(); std::cout () = " () , p.use_count() = " << p.use_count() ; std::thread t1(thr, p), t2(thr, p), t3(thr, p); std::cout () = " () , p...
auto_ptr<map<int, vector<int>>> ptr(new map<int, vector<int>>()); ``` 你也可以先声明`auto_ptr`,然后再为其分配内存: ```cpp auto_ptr<map<int, int>> ptr; ptr = auto_ptr<map<int, int>>(new map<int, int>...
shared_ptr<int> sp(new int(5)); weak_ptr<int> wp(sp); ``` 在这个例子中,`wp`被初始化为指向`sp`所管理的对象,但`sp`的引用计数并未增加。 3.2 检查`weak_ptr`的有效性 由于`weak_ptr`不控制对象的生命周期...
C++智能指针shared_ptr分析 概要: shared_ptr是c++智能指针中适用场景多,功能实现较多的智能指针。... , _refCount(new int(1)) {} sharedptr(sharedptr<T>& sp) :_ptr(sp._ptr) , _refCount(sp._refCount) {
int ioctrl_unmap(uint32_t *addr_ptr, size_t block_len) int ioctrl_set(uint8_t mode) GPIO fuctions: int gpio_init(void) int gpio_cleanup(void) int gpio_set_input_mode(void) int gpio_set_output_...
shared_ptr<int> sp = make_shared<int>(42); ``` 在不使用make_shared的情况下,也可以直接使用new操作符来创建对象,并将原始指针传递给shared_ptr的构造函数: ```cpp shared_ptr<int> sp(new int(42)); ``` ...
这里的`*`表示这是一个指针,`func_ptr`是变量名,`(int, int)`是函数接受的参数列表,`int`是函数的返回类型。现在我们可以声明一个函数指针变量,并将其指向`add`函数: ```cpp func_ptr = &add; ``` 然后,通过...
int_ptr ptr = &a; 4. 为函数指针定义别名: typedef void (*func_ptr)(int); func_ptr func; ... 使用 typedef 可以使代码更加清晰和可维护。当你阅读一段代码时,如果看到了一个 typedef 定义的别名,你可以更容易...
std::unique_ptr<int, myDel> p6(new int); ``` unique_ptr提供了几个重要的成员方法: - `operator*()`:解引用操作,返回指向数据的引用。 - `operator->()`:访问指针所指向的对象的成员,类似原始指针的`->`...