On Feb 22, 12:07 pm, Paul Rubin <http://[EMAIL PROTECTED]> wrote: > Nicola Musatti <[EMAIL PROTECTED]> writes: > > In C++ memory is just another resource which you can handle just like > > any other one, possibly using RAII. > > Ok, I'll bite. Here's a straightforward Python expression: > > a = [f(x) + g(y) for x,y in izip(m1, m2) if h(x,y).frob() == 7] > > Consider how many intermediate objects are being allocated in figuring > out that listcomp. Do you REALLY want to manage all the deallocation > with something like RAII?
What makes you think that a translation of a similar expression would involve explicit dynamic allocation at all? Barring bugs, here's an equivalent example: #include <iostream> #include <map> #include <vector> int f(int n) { return n * 2; } int g(int n) { return ( n * 2 ) + 1; } std::map<int, int> izip(int i, int j) { std::map<int, int> m; m[i] = j; m[j] = i; return m; } class A { int i, j; public: A(int ii, int jj) : i(ii), j(jj) {} int frob() { return i + j; } }; A h(int i, int j) { return A(i, j); } int main() { int m1 = 3; int m2 = 4; std::vector<int> a; std::map<int, int> m = izip(m1, m2); for ( std::map<int,int>::iterator i = m.begin(); i != m.end(); ++i ) { if ( h(i->first, i->second).frob() == 7 ) a.push_back(f(i->first) + g(i->second)); } for ( std::vector<int>::iterator i = a.begin(); i != a.end(); ++i ) std::cout << *i << '\n'; } As you can see the standard library takes care of all memory management. Cheers, Nicola Musatti -- http://mail.python.org/mailman/listinfo/python-list