C++中如果动态分配的内存没有被正确的删除,那么就会导致内存泄漏,例如以下代码: void f() { int *p = new int(3); std::cout << *p << std::endl; } 当p超出作用域后,由于没有被手动删除,因此会导致内存泄漏。 请设计一个scope pointer:ScopedPtr,其具有以下特点: 1. 使用一个动态分配的int初始化(构造函数)。 2. 当该scope pointer超出作用域后,会自动释放动态分配的内存。 3. 可以通过解引用操作符获取到该动态分配的int的引用。 4. 该scope pointer不能被复制。 请实现该ScopedPtr,可以让以下代码编译通过正常运行: #include <iostream> class ScopedPtr { }; void test(int n) {     ScopedPtr ptr(new int(n));     *ptr *= 2;     std::cout << *ptr << std::endl; } int main () {     int n = 0;     std::cin >> n;     test(n);     return 0; }-笔试面试资料

这是qklbishe.com第9141 篇笔试面试资料
提供答案分析,通过本文《C++中如果动态分配的内存没有被正确的删除,那么就会导致内存泄漏,例如以下代码:
void f() { int *p = new int(3); std::cout << *p << std::endl; } 当p超出作用域后,由于没有被手动删除,因此会导致内存泄漏。
请设计一个scope pointer:ScopedPtr,其具有以下特点: 1. 使用一个动态分配的int初始化(构造函数)。 2. 当该scope pointer超出作用域后,会自动释放动态分配的内存。 3. 可以通过解引用操作符获取到该动态分配的int的引用。 4. 该scope pointer不能被复制。
请实现该ScopedPtr,可以让以下代码编译通过正常运行: #include <iostream> class ScopedPtr { }; void test(int n) {     ScopedPtr ptr(new int(n));     *ptr *= 2;     std::cout << *ptr << std::endl; } int main () {     int n = 0;     std::cin >> n;     test(n);     return 0; }-笔试面试资料》可以理解其中的代码原理,这是一篇很好的求职学习资料
本站提供程序员计算机面试经验学习,笔试经验,包括字节跳动/头条,腾讯,阿里,美团,滴滴出行,网易,百度,京东,小米,华为,微软等互联网大厂真题学习背诵。

答案:

C++中如果动态分配的内存没有被正确的删除,那么就会导致内存泄漏,例如以下代码:

void f() {     int *p = new int(3);     std::cout << *p << std::endl; }
当p超出作用域后,由于没有被手动删除,因此会导致内存泄漏。
请设计一个scope pointer:ScopedPtr,其具有以下特点:
1. 使用一个动态分配的int初始化(构造函数)。
2. 当该scope pointer超出作用域后,会自动释放动态分配的内存。
3. 可以通过解引用操作符获取到该动态分配的int的引用。
4. 该scope pointer不能被复制。
请实现该ScopedPtr,可以让以下代码编译通过正常运行:
#include <iostream>  class ScopedPtr { };  void test(int n) {     ScopedPtr ptr(new int(n));      *ptr *= 2;      std::cout << *ptr << std::endl; }  int main () {     int n = 0;     std::cin >> n;      test(n);      return 0; } 

C++中如果动态分配的内存没有被正确的删除,那么就会导致内存泄漏,例如以下代码:           void f() {     int *p = new int(3);     std::cout &lt;&lt; *p &lt;&lt; std::endl; }   当p超出作用域后,由于没有被手动删除,因此会导致内存泄漏。          请设计一个scope pointer:ScopedPtr,其具有以下特点:    1. 使用一个动态分配的int初始化(构造函数)。    2. 当该scope pointer超出作用域后,会自动释放动态分配的内存。    3. 可以通过解引用操作符获取到该动态分配的int的引用。    4. 该scope pointer不能被复制。          请实现该ScopedPtr,可以让以下代码编译通过正常运行:  #include &lt;iostream&gt;  class ScopedPtr { };  void test(int n) {     ScopedPtr ptr(new int(n));      *ptr *= 2;      std::cout &lt;&lt; *ptr &lt;&lt; std::endl; }  int main () {     int n = 0;     std::cin &gt;&gt; n;      test(n);      return 0; } DuXinyu
实际上就是实现一个unique_ptr
#include <iostream> using namespace std;  class ScopedPtr { public: 	ScopedPtr(int* add):_add(add){} 	~ScopedPtr() 	{ 		delete _add; 	}          //注意这里返回的是引用,如果返回的不是引用的话         //底下代码*ptr *= 2的左值就是一个不可修改的常量 	int& operator *() { 		return *_add; 	}  	int operator *=(int n) { 		return (*_add) * n; 	}  	int *_add; };  void test(int n) { 	ScopedPtr ptr(new int(n));  	*ptr *= 2;  	std::cout << *ptr << std::endl; }  int main() { 	int n = 0; 	std::cin >> n;  	test(n);  	return 0; }

2021-04-08 21:43:44 回复(0)

文章部分来自互联网,侵权联系删除
www.qklbishe.com

区块链毕设网(www.qklbishe.com)全网最靠谱的原创区块链毕设代做网站
部分资料来自网络,侵权联系删除!
资源收费仅为搬运整理打赏费用,用户自愿支付 !
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台 » C++中如果动态分配的内存没有被正确的删除,那么就会导致内存泄漏,例如以下代码: void f() { int *p = new int(3); std::cout << *p << std::endl; } 当p超出作用域后,由于没有被手动删除,因此会导致内存泄漏。 请设计一个scope pointer:ScopedPtr,其具有以下特点: 1. 使用一个动态分配的int初始化(构造函数)。 2. 当该scope pointer超出作用域后,会自动释放动态分配的内存。 3. 可以通过解引用操作符获取到该动态分配的int的引用。 4. 该scope pointer不能被复制。 请实现该ScopedPtr,可以让以下代码编译通过正常运行: #include <iostream> class ScopedPtr { }; void test(int n) {     ScopedPtr ptr(new int(n));     *ptr *= 2;     std::cout << *ptr << std::endl; } int main () {     int n = 0;     std::cin >> n;     test(n);     return 0; }-笔试面试资料

提供最优质的资源集合

立即查看 了解详情