第一范文网 - 专业文章范例文档资料分享平台

2020年京东精选50面试题及答案

来源:用户分享 时间:2025/7/30 9:43:41 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

:m_pResource(pResource) , m_pCounter(new Count er())

m_pCount er~>shareCount - 1;

SharedPtr (const WeakPtr& other) // 供 WeakPtr 的 lock。使用 :m_pResource

(other. m_pResource)

, m_pCounter(other? m_pCounter) [

if (0 -- m_pCounter\

SharedPtr(const SharedPtr& o^her)

:m_pResource (other\, m_pCounter(other\[

■H-(m_pCounter->shareCount); // 増加引用计数

SharedPtr& operator = (const SharedPtr& other) [

if (this == Mother) return this; release ();

m_pCounter = other? m_pC ounter; m_pResource = other. m_pResource; ++(m_pCounter->shareCount); // 増加引用计数

x

return *this; }

\I

release ();

T& operator bool () [

return m_pResource != nullpir;

// 如果nullptr == m_pResource,抛出异常 return *m_pResource;

}

T& operator * ()

T* operator -> () [

return m_pResource; } private:

void release () [

// T*肯定由 SharedPtr 释放,Count er*如果没有 WeakPtr,也由 SharedPtr 释放 --m_pCount er~>shareCount; if (0 == m_pCount er~>shareCount) [

delete m_pResource; m_pResource - nullptr; if (0 == m_pCount er~>weakCount) [

delete m_pCounter; m_pCounter = NULL;

public:

T* m_pResource = nullptr; Counter* m_pCounter - nullptr;

WeakPtr类

主要的成员函数包括: 默认构造函数

参数为SharedPh&的explicit单参数构造函数 拷贝构造函数 拷贝赋值函数 析构函数

lock。函数:取指向的SharePtr,如果未指向任何ShazePtr,或者已被析构,返回指 向 nullptr 的 SharePtr

expired ()?数:是否指向SharePtr,如果指向Share Ptr其是否已经析构 release ()? 数 WeakPtr实现如下:

template class WeakPtr [ public:

friend class SharedPtr; If%便 weak_ptr 与 share_ptr 设置引用计数和赋值。 WeakPtr ()

m_pResource(nullptr)

, m_pCount er (new Count er ()) [

m_pCount er^weakCount = 1; }

WeakPtr(SharedPtr& other)

:m_pResource(other. m_pResource) ,m_pCount er (other. m_pCounter) [

++(m_pCounter->weakCount);

-

}

WeakPtr(WeakPtr& other)

:m_pResource(other. m_pResource) , m_pCounter(other. m_pCounter) {

++(m_pC ount erwe akC ount); }

WeakPtr& operator = (WeakPtr& other) [

if (this == &other) return this; release ();

m_pCounter = other. m_pCount er; m_pResource = other. m_pResource; ++m_pCount er^weakCount; return *this; release ();

WeakPtr& operator =(SharedPtr& other)

-x

-

m_pCounter = other? m_pCounter; m_pResource - other. m_pCount er;

+-hn_pCount er->weakCount; // 増加弱引用计数 return *this; }

WeakPtr () [

release ();

}

SharedPtr lock() [

return SharedPtr(*this);

}

bool expired () [

if (m_pCounter != nullptr && m_pCountershareCount != 0) return false; return true; } private:

void release() {

--m_pCount er\

if (0 == m_pCourrt er->weakCount && 0 == m_pCount er->shareCount) // 必 须都为0

才能删除

{

delete m_pCounter; m_pCounter = NULL;

private:

T* m_pResource; //可能会成为悬挂指针 Counter* m_pCounter;

35.请问C++11有哪些新特性?

c卄11最常用的新特性如下:

aut。关键字:编译器可以根据初始值自动推导出类型。但是不能用于函数传参以及数 组类

型的推导

nullptr关键字:mllptr是一种特殊类型的字面值,它可以被转换成任意其它的指针 类型;

而NULL-般被宏定义为0,在谒到重载时可能会出现问题。

智能指针:C++11新増了 std: :shared_p-rk std: : weak_ptr等类型的智能指针,用于 解决内存管理的问题。

初始化列表:使用初始化列表来对类进行初始化

右值引用:基于右值引用可以实现移动语义和完美转发,消除两个对象交互时不必要的 对象拷贝,节省运算存储资源,提高效率

atomic原子操作用于多线程资源互斥操作

新増STL容器array以及tuple

36. 智能指针是线程安全的吗?哪些地方需要考虑线程安

全?

1. 智能指针对象中引用计数是多个智能指针对象共享的,两个线程中智能指针的引用计

数同时卄或者一,这个操作不是原子的,引用计数原来是1,卄了两次,可能还是2, 这样引用计数就乱了,有可能造成资源粹放或者程序崩溃的风险。所以说智能指针中 I或一的操作是需要加锁的,也就是说引用计数的操作是线程安全的

2. 智能指针的对象存放在堆上,两个线程同时去访问,就会造成线程安全问题. std:: shaxed_ptr 循环引用 struct ListNode {

int _data;

shared_ptr

shared_ptr nodel(new ListNode); shared_ptr node2(new ListNode); cout ? no del. use__count () ? endl; cout ? node2. use__count () ? endl; nodel->_next = node2;

r

-P^ev;

ListNode, _next;

listNodeO { cout ? ); int \:)\

搜索更多关于: 2020年京东精选50面试题及答案 的文档
2020年京东精选50面试题及答案.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c8utyq5c5gu8mpoj7ocb09o8y29wtcx00z09_7.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top