gpt4 book ai didi

c++ - 如何删除类中的实例类

转载 作者:太空宇宙 更新时间:2023-11-04 16:22:29 25 4
gpt4 key购买 nike

考虑这个代码片段:

#include <iostream>

using namespace std;

class X {
public:
class Z {
public:
void f() {
cout << "Z().f()" << endl;
}
};

class Y {
public:
int A;
Y(int x) {
A = x;
}

int c() {
return A;
}
};

public:
Z* z;

// How to free Y instance ?
Y* a(int x) {
Y* y = new Y(x);
return y;
}

public:
X() {
z = new Z();
}

~X() {
delete z;
}
};

int main(void) {
int a;
X* x = new X();
cout << "input :" << endl;
cin >> a;
cout << "result : " << x->a(a)->c() << endl;
x->z->f();
delete x;
return 0;
}

虽然 Z 对象可以很容易地在 ~X() 上释放,但我很好奇如何释放 Y 对象?因为我没有分配任何变量来保存它的内存地址。

顺便说一句,这样的术语是什么? x->a(a)->c()

谢谢。 :)

最佳答案

// How to free Y instance ?
Y* a(int x) {
Y* y = new Y(x);
return y;
}

好吧,问题是从函数原型(prototype)中不清楚负责删除实例。但是由于只有调用者拥有实例的句柄,因此删除应该是被调用者的责任。这应该有很好的记录。但最好的方法是使用 smart pointer具有正确的所有权语义。在这种情况下,std::unique_ptr<Y>似乎是一个合适的匹配项,仅使用它这一事实就表明了意图,消除了对有关所有权的文档的需求:

std::unique_ptr<Y> a(int x)
{
return std::unique_ptr<Y>( new Y(x) );
}

关于c++ - 如何删除类中的实例类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15327549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com