N******K 发帖数: 10202 | 1 p1 = new object1
p2 = new object2
p3 = new object3
p4 = new object4
function A(input (i.e., const): p1, p2 , output p3 p4)
{
temp1= shared_ptr(new ObjectTemp1)
temp2= shared_ptr(new ObjectTemp2)
do somthing using p1 p2 temp 1 temp2 to update p3 p4
} //delete temp1, delete temp2
输入 输出 都已经new好了
内部加工加工
内部new出来的 {}结束统统释放 | N******K 发帖数: 10202 | 2 当有成员变量 m_ClassA_member 的时候
p1 = new object1;
p2 = new object2;
p3 = new object3;
p4 = new object4;
ClasseA::function A(input (i.e., const): p1, p2 , output p3 p4)
{
temp1= shared_ptr(new ObjectTemp1);
temp2= shared_ptr(new ObjectTemp2);
m_ClassA_member = new(xxx);
do somthing using p1 p2 temp 1 temp2 to update p3 p4
} //delete temp1, delete temp2
ClassA()
{
m_ClassA_member = nullptr;
}
~ClassA()
{
if (m_ClassA_member != nullptr)
delete m_ClassA_member ;
}
【在 N******K 的大作中提到】 : p1 = new object1 : p2 = new object2 : p3 = new object3 : p4 = new object4 : function A(input (i.e., const): p1, p2 , output p3 p4) : { : temp1= shared_ptr(new ObjectTemp1) : temp2= shared_ptr(new ObjectTemp2) : do somthing using p1 p2 temp 1 temp2 to update p3 p4 : } //delete temp1, delete temp2
| p***o 发帖数: 1252 | 3 你这code看着像是java程序员写的。
【在 N******K 的大作中提到】 : 当有成员变量 m_ClassA_member 的时候 : p1 = new object1; : p2 = new object2; : p3 = new object3; : p4 = new object4; : ClasseA::function A(input (i.e., const): p1, p2 , output p3 p4) : { : temp1= shared_ptr(new ObjectTemp1); : temp2= shared_ptr(new ObjectTemp2); : m_ClassA_member = new(xxx);
| N******K 发帖数: 10202 | 4 你觉得c++程序猿怎么写?
【在 p***o 的大作中提到】 : 你这code看着像是java程序员写的。
| N******K 发帖数: 10202 | 5 我估计你喜欢 return shared_ptr 或者 把 shared_ptr 作为函数参数
比如这样的例子 http://stackoverflow.com/questions/395123/raii-and-smart-pointers-in-c
void setLog(const Foo & foo, const Bar & bar) {
shared_ptr file(new File("/path/to/file", File::append));
foo.setLogFile(file);
bar.setLogFile(file);
}
foo::setLogFile(shared_ptr input_file)
{ member_of_foo=input_file;
}
bar::setLogFile(shared_ptr input_file)
{ member_of_bar=input_file;
}
类的成员变量 也当做函数输出
比如 setLog 的输入是 const Foo & foo, const Bar & bar
输出实际上是member_of_foo和member_of_bar
这两个setLogFile实际上做的是分配资源,并保存为成员变量
我第一篇帖子说的是 一般函数内部做一些运算 并不参与成员变量的初始化
结论:函数内 new 一个东西 然后把这个东西的裸指针作为输出 是错误行为
我第二篇帖子说的是 成员变量的初始化 没有共享资源。
结论:函数内 new 一个东西,如果要作为输出,应该是给某个类成员变量
本帖说的是 成员变量的初始化 共享资源。
结论:函数内 new 一个东西,如果要作为输出给多个类,应该用shared_ptr
java程序猿不会管这些的 到处new就行了
【在 p***o 的大作中提到】 : 你这code看着像是java程序员写的。
|
|