How to write copy constructor when returning any template object.
-
jhwurmbach wrote:
Because the board software eats all >...
Only if it first finds a < character.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
OK, I might have used the wrong word: What are < > called, then? In German, < ( [ and { are all called "Klammer", with the possible distinction as "spitz" (pointed), "rund" (rounded), "eckig" (squared) and "geschweift" (cambered?) when needed.
Let's think the unthinkable, let's do the undoable, let's prepare to grapple with the ineffable itself, and see if we may not eff it after all.
Douglas Adams, "Dirk Gently's Holistic Detective Agency" -
As long as he does not return a pointer or reference to it, I think there is nothing wrong.
Let's think the unthinkable, let's do the undoable, let's prepare to grapple with the ineffable itself, and see if we may not eff it after all.
Douglas Adams, "Dirk Gently's Holistic Detective Agency"As you are pointing out, it is not an error; anyway, as I pointed out, it is not a good idea (hint: efficiency). :)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
-
As you are pointing out, it is not an error; anyway, as I pointed out, it is not a good idea (hint: efficiency). :)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
That is probably premature optimisation. When specifically this copying of the array slows the whole application down, then we can think about how we speed his code up. :-D
Let's think the unthinkable, let's do the undoable, let's prepare to grapple with the ineffable itself, and see if we may not eff it after all.
Douglas Adams, "Dirk Gently's Holistic Detective Agency" -
That is probably premature optimisation. When specifically this copying of the array slows the whole application down, then we can think about how we speed his code up. :-D
Let's think the unthinkable, let's do the undoable, let's prepare to grapple with the ineffable itself, and see if we may not eff it after all.
Douglas Adams, "Dirk Gently's Holistic Detective Agency"Oh no, this is definitely NOT premature optimization. The original method design is simply bad: whenever you deal with array or (not trivial) objects, reference passing is a must (unless you have strong motivations to do the opposite). Premature optimization is bad. Bad design is even worse. :-D
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
-
Oh no, this is definitely NOT premature optimization. The original method design is simply bad: whenever you deal with array or (not trivial) objects, reference passing is a must (unless you have strong motivations to do the opposite). Premature optimization is bad. Bad design is even worse. :-D
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
OK, you won. I am changing my function definition to
const CArray& COpenFolderPage::GetPagesPath()
Oh- wait! The Array is a function-local variable. We *have to* return it by value! The compiler would have to do a copy anyway. We have three objects involved: TargetArray - temporary - Source( local to function) The target being a mere reference is illegal, because the local variable goes out of scope. So, in all possible implementations, two of the three objects can be merged in one by the optimizer, but never all three. The compiler has to copy once. -- modified at 4:58 Monday 19th November, 2007 (This modification overlapped with the replyh
Let's think the unthinkable, let's do the undoable, let's prepare to grapple with the ineffable itself, and see if we may not eff it after all.
Douglas Adams, "Dirk Gently's Holistic Detective Agency" -
OK, you won. I am changing my function definition to
const CArray& COpenFolderPage::GetPagesPath()
Oh- wait! The Array is a function-local variable. We *have to* return it by value! The compiler would have to do a copy anyway. We have three objects involved: TargetArray - temporary - Source( local to function) The target being a mere reference is illegal, because the local variable goes out of scope. So, in all possible implementations, two of the three objects can be merged in one by the optimizer, but never all three. The compiler has to copy once. -- modified at 4:58 Monday 19th November, 2007 (This modification overlapped with the replyh
Let's think the unthinkable, let's do the undoable, let's prepare to grapple with the ineffable itself, and see if we may not eff it after all.
Douglas Adams, "Dirk Gently's Holistic Detective Agency"Because the local variable goes out of scope. :-D I know, I'm quite polemical, cheers :rose:
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
-
Because the local variable goes out of scope. :-D I know, I'm quite polemical, cheers :rose:
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
CPallini wrote:
I know, I'm quite polemical, cheers
No you are'nt. I was acting faster than I was thinking. But I was just in the processinng of modifying my post... :-D
Let's think the unthinkable, let's do the undoable, let's prepare to grapple with the ineffable itself, and see if we may not eff it after all.
Douglas Adams, "Dirk Gently's Holistic Detective Agency" -
OK, you won. I am changing my function definition to
const CArray& COpenFolderPage::GetPagesPath()
Oh- wait! The Array is a function-local variable. We *have to* return it by value! The compiler would have to do a copy anyway. We have three objects involved: TargetArray - temporary - Source( local to function) The target being a mere reference is illegal, because the local variable goes out of scope. So, in all possible implementations, two of the three objects can be merged in one by the optimizer, but never all three. The compiler has to copy once. -- modified at 4:58 Monday 19th November, 2007 (This modification overlapped with the replyh
Let's think the unthinkable, let's do the undoable, let's prepare to grapple with the ineffable itself, and see if we may not eff it after all.
Douglas Adams, "Dirk Gently's Holistic Detective Agency"What about
bool COpenFolderPage::GetPagesPath(CArray < type, type > & pagePathArray )
{
bool success;// some code using pagePathArray
return success;
}? :-D
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
-
What about
bool COpenFolderPage::GetPagesPath(CArray < type, type > & pagePathArray )
{
bool success;// some code using pagePathArray
return success;
}? :-D
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
Better. Not as expressive, though. Plus it might or might not be faster. E.g. the function could need a very large temporary array in its algorithm. This would then enlarge the callers array, without shrinking it, like a copy would do. Also, it is not as easy to not touch the callers array in case of the call not succeding.
Let's think the unthinkable, let's do the undoable, let's prepare to grapple with the ineffable itself, and see if we may not eff it after all.
Douglas Adams, "Dirk Gently's Holistic Detective Agency" -
Better. Not as expressive, though. Plus it might or might not be faster. E.g. the function could need a very large temporary array in its algorithm. This would then enlarge the callers array, without shrinking it, like a copy would do. Also, it is not as easy to not touch the callers array in case of the call not succeding.
Let's think the unthinkable, let's do the undoable, let's prepare to grapple with the ineffable itself, and see if we may not eff it after all.
Douglas Adams, "Dirk Gently's Holistic Detective Agency"jhwurmbach wrote:
E.g. the function could need a very large temporary array in its algorithm. This would then enlarge the callers array, without shrinking it, like a copy would do.
You can address all the above requirements inside method definition without loss of efficiency (e.g. if you need a temporary array then explicitely instantiate it, no need to pollute caller array). The code snippet shows how to remove an unnecessary copy step. If it is a big advantage or not depends on method logic, of course. :)
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
-
OK, I might have used the wrong word: What are < > called, then? In German, < ( [ and { are all called "Klammer", with the possible distinction as "spitz" (pointed), "rund" (rounded), "eckig" (squared) and "geschweift" (cambered?) when needed.
Let's think the unthinkable, let's do the undoable, let's prepare to grapple with the ineffable itself, and see if we may not eff it after all.
Douglas Adams, "Dirk Gently's Holistic Detective Agency"jhwurmbach wrote:
OK, I might have used the wrong word...
No, I was just saying that replacing both of them was not necessary. Simply replacing the left bracket is all that's necessary.
jhwurmbach wrote:
What are < > called, then?
Angle brackets.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne