2019-04-24 22:27
⁄ 工业·编程
⁄ 共 4648字
unique_ptr <>是c ++ 11提供的智能指针实现之一,用于防止内存泄漏。unique_ptr对象包含一个原始指针,并负责其生命周期。当这个对象被销毁的时候,它的析构函数会删除关联的原始指针。
unique_ptr有重载的- >和*运算符,所以它可以被用于类似于普通的指针。
示例:
#include <iostream>
#include <memory>
struct Task {
int mId;
Task(int id) : mId(id) {
std::cout ...
C++11, 指针阅读全文
2019-04-22 22:16
⁄ 工业·编程
⁄ 共 1177字
1、尽量不要使用相同的原始指针来创建多个shared_ptr对象,因为在这种情况下,不同的shared_ptr对象不会知道它们与其他shared_ptr对象共享指针。
这样会造成什么样的问题?
设想两个shared指针由相同的原始指针创建:
int *rawPtr = new int();
std::shared_ptr<int> ptr_1(rawPtr);
std::shared_ptr<int> ptr_2(rawPtr);
假设ptr_2超出范围,那么它将删除关联的原始指针,这样ptr1就会指向一个悬挂指针。
所以,当...
C++11, 指针阅读全文
2019-04-21 22:12
⁄ 工业·编程
⁄ 共 1062字
++,--和[]操作符
相比于原始指针,shared_ptr只提供这些运算符:
1) ->, *
2) 比较运算符
但是,shared_ptr不提供
1) 指针运算比如+,-,++,--
2) Operator []
例子:
#include <iostream>
#include <memory>
struct Sample {
void dummyFunction() {
std::cout << "dummyFunction" << std::endl;
}
};
int main() {
std::shared_ptr<Sample>...
C++11, 指针阅读全文
2019-04-20 22:07
⁄ 工业·编程
⁄ 共 2332字
当一个shared_ptr对象超出作用域时,其析构函数被调用,在析构函数中,将其引用计数减1,如果引用计数的值变为0,则删除关联的原始指针。
要删除析构函数中的内部原始指针,默认情况下,shared_ptr调用delete()函数,即
delete Pointer;
但是,我们在析构函数中并不总是要使用delete函数,还可能有其他的需求。
如果shared_ptr指向一个数组而不是一个简单的指针
std::shared_ptr<int> p3(new int[12]);
在其析构函数中,s...
C++11, 指针阅读全文
2019-04-19 21:59
⁄ 工业·编程
⁄ 共 2251字
std::shared_ptr<>是c++11中引入的一种智能指针,它足够聪明,如果指针不在任何地方使用,就会自动删除指针。这可以帮助我们彻底消除内存泄露和悬挂指针的问题。
shared_ptr和共享所有权
它遵循共享所有权的概念,即不同的shared_ptr对象可以与相同的指针相关联,并且在内部使用引用计数机制来实现。
每个shared_ptr对象内部指向两块内存区域
1)指向对象
2)指向用于引用计数的控制数据
共享所有权怎样在引用计数的帮助下...
C++11, 指针阅读全文
2018-11-17 16:58
⁄ 工业·编程
⁄ 共 1595字
1:如果函数的参数是一个指针,不要指望用该指针去申请动态内存。Test 函数的语句 GetMemory(str, 200)并没有使 str 获得期望的内存,str 依旧是 NULL,为什么?
void GetMemory(char *p, int num)
{
p = (char *)malloc(sizeof(char) * num);
}
void Test(void)
{
char *str = NULL;
GetMemory...
指针阅读全文
2018-11-16 16:41
⁄ 工业·编程
⁄ 共 517字
1,初始化链表头部指针需要用二级指针或者一级指针的引用。
2,销毁链表需要用到二级指针或者一级指针的引用。
3,插入、删除、遍历、清空结点用一级指针即可。
分析:
1,只要是修改头指针则必须传递头指针的地址,否则传递头指针值即可(即头指针本身)。这与普通变量类似,当需要修改普通变量的值,需传递其地址,否则传递普通变量的值即可(即这个变量的拷贝)。使用二级指针,很方便就修改了传入的结点一级指针的值。 如果...
指针阅读全文
2018-11-15 16:17
⁄ 工业·编程
⁄ 共 494字
void AddToTail(ListNode **head,int value){
ListNode *newNode = new ListNode();
newNode->data=value;
newNode->next=NULL;
if(*head==NULL)
*head=newNode;
else{
ListNode *tempNode = *head;
&...
c++, 指针阅读全文
2018-11-03 14:45
⁄ 工业·编程
⁄ 共 1307字
设计一个函数:
void find1(char array[], char search, char *pa)
要求: 这个函数参数中的数组array是以\0值为结束的字符串,要求在字符串array中查找与参数search给出的字符相同的字符。如果找到,通过第三个参数(pa)返回array字符串中首先碰到的字符的地址。如果没有找到,则为pa为NULL。
依题意,实现代码如下。
void find1(char [] array, char search, char *pa)
{
for (int i = 0; *(array + i) !=...
指针阅读全文
2018-11-02 14:41
⁄ 工业·编程
⁄ 共 386字
1.在栈区建立数组,指向常量区数据的字符串
char *cPioint[3]={"111111","2222222","3333333"};
这种用法可以通过二级指针进行传参
void PrintfStr(char **cpoint);
当想访问“111111”时的时候
采用以下两种方法
1)printf("%s",cpoint[0]);
2)printf("%s",*(cpoint+0);
2.手动在堆区分配空间
char **chPoint=(char**)malloc(counts*sizeof(char*));
for(i=0;i<c...
指针阅读全文